javascript类型的xsd限制
我希望根据模式验证xml,但是对于某些节点,我希望使用比xsd模式更智能的验证 例如,我有一个Person.xml文件:javascript类型的xsd限制,javascript,xml,xsd,msxml,Javascript,Xml,Xsd,Msxml,我希望根据模式验证xml,但是对于某些节点,我希望使用比xsd模式更智能的验证 例如,我有一个Person.xml文件: <?xml version="1.0" encoding="utf-8"?> <person xmlns="urn:person.xsd"> <name>John Smith</name> <id>123455</id> </person> 约翰·史密斯 123455 我想以一种
<?xml version="1.0" encoding="utf-8"?>
<person xmlns="urn:person.xsd">
<name>John Smith</name>
<id>123455</id>
</person>
约翰·史密斯
123455
我想以一种智能的方式验证ID节点:前5位数字(12345)是个人的ID,第六位数字(5)是校验和数字,由前5位数字的总和模10(1+2+3+4+5模10=5)计算得出
理想情况下,我希望扩展xsd模式的验证支持,以允许javascript等代码验证节点
例如:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="urn:person.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="id">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:javascript>
var b= parseInt(input);
var b1= parseInt(b/100000)%10;
var b2= parseInt(b/10000)%10;
var b3= parseInt(b/1000)%10;
var b4= parseInt(b/100)%10;
var b5= parseInt(b/10)%10;
var b6= b%10;
if (b6 == (b1+b2+b3+b4+b5)%10 )
return "true";
else
return "false";
</xs:javascript>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
var b=parseInt(输入);
var b1=parseInt(b/100000)%10;
var b2=parseInt(b/10000)%10;
var b3=parseInt(b/1000)%10;
var b4=parseInt(b/100)%10;
var b5=parseInt(b/10)%10;
风险值b6=b%10;
如果(b6==(b1+b2+b3+b4+b5)%10)
返回“真”;
其他的
返回“false”;
现在这当然不受支持。我可以将此节点作为字符串进行验证,并在源代码中进行进一步验证。但是我想要一个通用的解决方案,我的代码可以删除任何xml,我不想要硬编码的解决方案
这可能是一个常见的问题,但我还没有找到解决方案
那么,把额外的验证信息放在哪里最好呢
或者,有没有办法扩展MSXML或.Net的XML验证器以支持自定义验证(我的程序主要是用.Net编写的)
谢谢在标准XSD中,最接近的方法是使用。这指定内容必须符合的正则表达式 然而,正则表达式只适用于相当简单的验证,不能满足您的需要 一个选项是将脚本添加到类型的。这是为“模式组件的面向人和机器的注释”而设计的。然后,您可以将此脚本作为第二阶段执行,从而创建所需的更通用的解决方案 由于您使用的是MSXML,因此可以使用