zl程序教程

您现在的位置是:首页 >  前端

当前栏目

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

正则表达式数据XML 使用 进行 验证
2023-06-13 09:13:44 时间

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

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

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


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

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


examples:

/***examples.xml***/
<?xmlversion="1.0"encoding="gb2312"?>
<rootxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="examples.xsd">
   <user>
  <name>test</name>
  <email>moonpiazza@hotmail.com</email>
  <ip>127.0.0.1</ip>
  <color>#000000</color>
   </user>
   <user>
  <name>guest</name>
  <email>guest@371.net</email>
  <ip>202.102.224.25</ip>
  <color>#FFFFFF</color>
   </user>   
</root>


/***examples.xsd***/
<?xmlversion="1.0"encoding="gb2312"?>
<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:elementname="root"type="Root"/>

<xsd:complexTypename="Root">
 <xsd:sequence>
  <xsd:elementname="user" type="User"minOccurs="0"maxOccurs="unbounded"/>
 </xsd:sequence>
</xsd:complexType>

<xsd:complexTypename="User">
 <xsd:sequence>
  <xsd:elementname="name"type="xsd:string"/>
  <xsd:elementname="email"type="Email"/>
  <xsd:elementname="ip"type="IP"/>
  <xsd:elementname="color"type="Color"/>
 </xsd:sequence>
</xsd:complexType>

<xsd:simpleTypename="Email">
 <xsd:restrictionbase="xsd:string">
  <xsd:patternvalue="([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})(\]?)"/>
 </xsd:restriction>
</xsd:simpleType>

<xsd:simpleTypename="IP">
 <xsd:restrictionbase="xsd:string">
  <xsd:patternvalue="(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])"/>
 </xsd:restriction>
</xsd:simpleType>

<xsd:simpleTypename="Color">
 <xsd:restrictionbase="xsd:string">
  <xsd:patternvalue="#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?"/>
 </xsd:restriction>
</xsd:simpleType>

</xsd:schema>


/***examples.htm***/
<SCRIPTLANGUAGE="javaScript">
functionvalidate()
{
 varoXML;
 varnParseError;
 varsReturnVal;

 oXML =newActiveXObject("MSXML2.DOMDocument.4.0");
 oXML.async =false;
 oXML.validateOnParse=true;

 oXML.load("examples.xml");

 nParseError =oXML.parseError.errorCode;
 sReturnVal ="";

 if(0!=nParseError)
 {
  //参看书籍教程中parseError对象属性
  sReturnVal =sReturnVal+"代码:"+oXML.parseError.errorCode+"\n";
  sReturnVal =sReturnVal+"错误原因:"+oXML.parseError.Reason+"\n";
  sReturnVal =sReturnVal+"错误字符串:"+oXML.parseError.srcText+"\n";
  sReturnVal =sReturnVal+"错误行号"+oXML.parseError.line+"\n";
  sReturnVal =sReturnVal+"错误列数:"+oXML.parseError.linepos+"\n";
 }
 else
 {
  sReturnVal =sReturnVal+"验证通过!"
 }

  alert(sReturnVal);
}

functionwindow.onload()
{
 validate();
}
</SCRIPT>