基於Schema的XML文件有效性驗證
阿新 • • 發佈:2018-12-15
此前是在網上搜了一份答案,然而發現這份答案竟不是完全正確的,於是修改了很多後,決定把自認為正確的答案寫在此處
題目
對於下列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”