如果您的驗證支持XSD 1.1,你可以使用XS:斷言否認這樣的特定屬性值:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
vc:minVersion="1.1">
<xs:element name="Transactions">
<xs:complexType>
<xs:sequence>
<xs:element name="Transaction" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="OrderID" type="xs:integer"/>
<xs:assert test="empty(index-of((8,9,10),@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
這應該回答你的第二個問題。
至於你的第一個問題,我不認爲訂單驗證是可能的。但是,您可以使用XSLT對XML文檔進行排序。
-----添加了回答第一個問題-----
謝謝你,邁克爾·凱。那麼......這是你的第一個問題的答案。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Transactions">
<xs:complexType>
<xs:sequence>
<xs:element name="Transaction" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="OrderID" type="xs:integer"/>
<xs:assert test="empty(index-of((8,9,10),@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="every $x in Transaction satisfies
(empty($x/preceding-sibling::*) or
($x/@OrderID gt $x/preceding-sibling::*[1]/@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:schema>
是的,訂單驗證是可能的。例如' ' –
2014-09-23 07:20:35
感謝Chong Lip Phang。老實說,我不明白你的回答是否足以知道它是否解決了我的問題。當你寫 大概8,9,10是指OrderID的具體值?我正在處理的文件大約有30K個事務。任何適用於我的方法都需要在不引用OrderID的特定值的情況下工作。第二個
Selecter
2014-09-30 01:13:58
是的, 如果OrderID的值是8,9或10,將導致驗證失敗。 XML數據很多,那麼你可能需要一個規則來匹配特定的模式。如果您省略此斷言規則並且OrderID跳過8,9或10,驗證仍將通過。 –
2014-09-30 02:52:40