使用正则表达式进行xml数据验证
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>
相关文章
- 正则表达式 固化分组
- 正则表达式快速入门
- Python: Re(正则表达式)库入门
- Python Re 正则表达式 数据匹配提取 基本使用
- 数据提取-正则表达式
- Jmeter 正则表达式提取括号中的文本内容
- MySQL通配符与正则表达式搜过滤数据详解
- SQL如何使用正则表达式对数据进行过滤
- MYSQL使用正则表达式过滤数据详解数据库
- java学习笔记06–正则表达式详解编程语言
- 使用XML导入MySQL:轻松实现数据迁移(xml数据导入mysql)
- MySQL高效操作XML数据(mysql操作xml)
- MySQL中利用正则表达式实现数据替换(mysql正则替换)
- MSSQL数据查询快速转换成XML(mssql转xml)
- 防范正则表达式和Redis攻击的策略(正则表达式redis攻击)
- 使用MySQL和XML创建强大的数据表格(mysql xml 表)
- 使用 MySQL 存储和解析 XML 格式的数据(mysql xml格式)
- MySQL数据库如何使用XML文件进行数据存储与交换(mysql xml文件)
- 深入了解MySQL XML数据库,优化数据存储与检索(mysql xml数据库)
- 在ASP中用“正则表达式对象”来校验数据的合法性
- php中正则表达式中的特殊符号
- 论坛转贴工具中用到的正则表达式学习正则的好例子
- JavascriptValidationforemail(正则表达式)英文翻译
- 经典Javascript正则表达式[优质排版]
- 如何使用JavaScript和正则表达式进行数据验证
- 解析posix与perl标准的正则表达式区别