使用正则表达式进行xml数据验证

XML Schema是定义XML的数据定义文件,以.xsd作为文件的扩展名。它也以被用来定义一类XML文件。

通常,一些特殊含义的数据不能通过系统预设的数据结构(类型)清楚地描述。
XML Schema 规范中声明:可以通过facet来限制(restriction)简单类型,从而产生一些新的原子类型(Atomic types)。
Facet有pattern, enumeration,等等;
这里要说的是其中非常有用的一项是:
pattern+ 正则表达式语言(regular expression language)
结合正则表达式的强大功能,就可以进行一些复杂的数据结构的描述

Examples可以通过xmlspy, xmlwrite,或js/vbs 等进行验证,下面举出了js验证的例子(需要msxml4.0支持)

有关定义 XML Schema 的信息,可以在 W3C 的 XML Schema 规范的第一部分 中找到。有关内置数据类型及其可用的局限性方面的信息,请检 查 XML Schema 规范的第二部分 。关于 这两部分 XML Schema 规范的简易摘要,请查看 W3C Primer on XML Schema

有关正则表达式,可以去 http://www.regexlib.com/ 看看

examples:

/*** examples.xml ***/

 1<root 2001="" \"="" _http:="" www.w3.org="" xmlns:xsi='\"' xmlschema-instance_="" xsi:nonamespaceschemalocation='\"examples.xsd\"'>
 2<user>
 3<name>test</name>
 4<email>[email protected]</email>
 5<ip>127.0.0.1</ip>
 6<color>#000000</color>
 7</user>
 8<user>
 9<name>guest</name>
10<email>[email protected]</email>
11<ip>202.102.224.25</ip>
12<color>#FFFFFF</color>
13</user>
14</root>

/*** examples.xsd ***/

 1<xsd:schema 2001="" \"="" _http:="" www.w3.org="" xmlns:xsd='\"' xmlschema_="">
 2<xsd:element name='\"root\"' type='\"Root\"/'>
 3<xsd:complextype name='\"Root\"'>
 4<xsd:sequence>
 5<xsd:element maxoccurs='\"unbounded\"' minoccurs='\"0\"' name='\"user\"' type='\"User\"'></xsd:element>
 6</xsd:sequence>
 7</xsd:complextype>
 8<xsd:complextype name='\"User\"'>
 9<xsd:sequence>
10<xsd:element name='\"name\"' type='\"xsd:string\"/'>
11<xsd:element name='\"email\"' type='\"Email\"'></xsd:element>
12<xsd:element name='\"ip\"' type='\"IP\"'></xsd:element>
13<xsd:element name='\"color\"' type='\"Color\"'></xsd:element>
14</xsd:element></xsd:sequence>
15</xsd:complextype>
16<xsd:simpletype name='\"Email\"'>
17<xsd:restriction base='\"xsd:string\"'>
18<xsd:pattern value='\"([a-zA-Z0-9_\\\\-\\\\.]+)@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.)|(([a-zA-Z0-9\\\\-]+\\\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\\\]?)\"/'>
19</xsd:pattern></xsd:restriction>
20</xsd:simpletype>
21<xsd:simpletype name='\"IP\"'>
22<xsd:restriction base='\"xsd:string\"'>
23<xsd:pattern value='\"(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\"/'>
24</xsd:pattern></xsd:restriction>
25</xsd:simpletype>
26<xsd:simpletype name='\"Color\"'>
27<xsd:restriction base='\"xsd:string\"'>
28<xsd:pattern value='\"#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\"/'>
29</xsd:pattern></xsd:restriction>
30</xsd:simpletype>
31</xsd:element></xsd:schema>

/*** examples.htm ***/

 1<script language='\"javaScript\"'>   
 2function validate()   
 3{   
 4var oXML ;   
 5var nParseError;   
 6var sReturnVal; 
 7
 8oXML = new ActiveXObject(\"MSXML2.DOMDocument.4.0\") ;   
 9oXML.async = false ;   
10oXML.validateOnParse = true; 
11
12oXML.load(\"examples.xml\") ; 
13
14nParseError = oXML.parseError.errorCode ;   
15sReturnVal = \"\" ; 
16
17if (0 != nParseError)   
18{   
19//参看书籍教程中parseError对象属性   
20sReturnVal = sReturnVal + \"代码:\" + oXML.parseError.errorCode + \"\\\n\" ;   
21sReturnVal = sReturnVal + \"错误原因:\" + oXML.parseError.Reason + \"\\\n\" ;   
22sReturnVal = sReturnVal + \"错误字符串:\" + oXML.parseError.srcText + \"\\\n\" ;   
23sReturnVal = sReturnVal + \"错误行号\" + oXML.parseError.line + \"\\\n\" ;   
24sReturnVal = sReturnVal + \"错误列数:\" + oXML.parseError.linepos + \"\\\n\" ;   
25}   
26else   
27{   
28sReturnVal = sReturnVal + \"验证通过!\"   
29} 
30
31alert(sReturnVal);   
32} 
33
34function window.onload()   
35{   
36validate();   
37}   
38</script>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus