我想根據模式來驗證我的xml,但是對於某些節點,我希望比xsd模式可以提供更智能的驗證。javascript類型的xsd限制
例如,我有一個Person.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<person xmlns="urn:person.xsd">
<name>John Smith</name>
<id>123455</id>
</person>
我想驗證在智能方式的ID節點:第一5位(12345)是該人的ID,和第六位數字(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>
現在,這當然是不支持的。我可以將此節點驗證爲字符串,並在我的源代碼中進行進一步驗證。但我想要一個通用的解決方案,並且我的代碼除了任何xml,並且不想要硬編碼的解決方案。
這可能是一個常見問題,但我一直無法找到解決方案。
那麼最好的地方放置額外的驗證信息?
另外還有一種方法來擴展MSXML或.Net的XML驗證器,以支持自定義驗證(我的程序主要是在.Net中編寫的)?
謝謝