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

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

题目

对于下列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”

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值