XML模式如何要求按属性对元素进行排序?
发布时间:2020-12-16 23:29:25 所属栏目:百科 来源:网络整理
导读:假设我有一个如下所示的 XML文件: TransactionsTransaction OrderID="5" ... /TransactionTransaction OrderID="6" ... /TransactionTransaction OrderID="11" ... /TransactionTransaction OrderID="7" ... /Transaction/Transactions 使用XML模式,是否可
假设我有一个如下所示的
XML文件:
<Transactions> <Transaction OrderID="5"> ... </Transaction> <Transaction OrderID="6"> ... </Transaction> <Transaction OrderID="11"> ... </Transaction> <Transaction OrderID="7"> ... </Transaction> </Transactions> 使用XML模式,是否可以指示订单#11的顺序不正确? 并且,一个相关的问题:验证规则是否可以指示是否可以跳过数字? 解决方法
如果验证器支持XSD 1.1,则可以使用xs:assert拒绝某些属性值,如下所示:
<?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文档进行排序. —–添加了第一个问题的答案—– 谢谢Michael Kay.嗯……这是你第一个问题的答案. <?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,@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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |