基于Schema的XML文档有效性验证

本文详细介绍了一种XML文档的XSD模式验证方法,包括如何创建符合特定规则的模式文档,如Order元素的多次出现、OrderID的特定格式等。同时,文章提供了完整的XSD文件示例,并解释了如何引用自定义的XSD文件、如何使用XMLSpy2013进行模式有效性验证以及解决中文乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此前是在网上搜了一份答案,然而发现这份答案竟不是完全正确的,于是修改了很多后,决定把自认为正确的答案写在此处

题目

对于下列XML文档,创建一个模式文档,要求如下:

  • Order元素在XML文档中可以出现多次,但是至少要出现一次。
  • OrderID的值的格式必须是AXXX,其中X为0~9的数字。
  • number的值的格式要在1~99之间。
  • zip元素的内容的格式必须是XXXXXX,其中X为0~9的数字。
<?xml version="1.0" encoding="GB2312"?>
<Orders >
	<Order orderID="A001" orderDate="2009-01-20">
		<name>玩具</name>
		<number>10</number>
		<city>北京</city>
		<zip>000000</zip>
	</Order>
	<Order orderID="A002" orderDate="2009-03-20">
		<name>文具</name>
		<number>5</number>
		<city>青岛</city>
		<zip>266000</zip>
	</Order>
</Orders>

答案

XML文件

注意添加命名空间,和修改本地XSD文件的地址:
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“D:\study\1stTermOfJunior\schema.xsd”

<?xml version="1.0" encoding="GB2312"?>
<Orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\study\1stTermOfJunior\schema.xsd">
	<Order orderID="A001" orderDate="2009-01-20">
		<name>玩具</name>
		<number>10</number>
		<city>北京</city>
		<zip>000000</zip>
	</Order>
	<Order orderID="A002" orderDate="2009-03-20">
		<name>文具</name>
		<number>5</number>
		<city>青岛</city>
		<zip>266000</zip>
	</Order>
</Orders>

XSD文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="Orders" type="ord"/>
	<xs:complexType name="ord">
		<xs:sequence>
			<xs:element name="Order" type="order" minOccurs="1" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="order">
		<xs:sequence>
			<xs:element name="name" type="xs:string"/>
			<xs:element name="number" type="num"/>
			<xs:element name="city" type="xs:string"/>
			<xs:element name="zip" type="zips"/>
		</xs:sequence>
		<xs:attribute name="orderID" type="idgs" use="required"/>
		<xs:attribute name="orderDate" type="xs:date" use="optional"/>
	</xs:complexType>
	<xs:simpleType name="zips">
		<xs:restriction base="xs:string">
			<xs:length value="6"/>
			<xs:pattern value="\d{6}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="idgs">
		<xs:restriction base="xs:string">
			<xs:length value="4"/>
			<xs:pattern value="[A]{1}\d{3}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="num">
		<xs:restriction base="xs:positiveInteger">
			<xs:maxInclusive value="99"/>
			<xs:minInclusive value="1"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>


结果

在这里插入图片描述

要点

1. 如何引用自定义的XSD文件

<Orders xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“D:\study\1stTermOfJunior\schema.xsd”>

2. 直接使用浏览器查看并不能验证模式

下载安装并破解XML Spy 2013,使用XML Spy 2013中的Validate XML进行模式的有效性验证。
在这里插入图片描述

3. 使用中文出现乱码

<?xml version=“1.0” encoding=“GB2312” ?>

4. 对string格式的定义

使用restriction和正则表达式,限定string格式。
pattern value="\d{6}"
pattern value="[A]{1}\d{3}
maxInclusive value=“99”
minInclusive value=“1”

5. 对元素出现次数进行限制

minOccurs=“1”
maxOccurs=“unbounded”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值