提问人:Filipe Santos 提问时间:9/29/2020 更新时间:9/29/2020 访问量:137
XSD 检查所有元素匹配项是否在整个 XML 文件中包含相同的值
XSD to check if all element occurrence contains the same value in the whole XML file
问:
我正在寻找一个 XSD 来验证包含具有许多付款的文件元素的 XML 是否具有相同的货币。
例:
<Payments>
<Payment>
<PaymentDate>2020-09-28</PaymentDate>
<Amount>11</Amount>
<Currency>USD</Currency>
</Payment>
<Payment>
<PaymentDate>2020-09-27</PaymentDate>
<Amount>19</Amount>
<Currency>USD</Currency>
</Payment>
<Payment>
<PaymentDate>2020-09-27</PaymentDate>
<Amount>12</Amount>
<Currency>USD</Currency>
</Payment>
</Payments>
应将上面的 XML 视为有效,因为所有元素都包含相同的货币信息。<Currency>
但是,以下 XML 不应有效,因为它至少包含一笔具有不同货币信息的付款:
<Payments>
<Payment>
<PaymentDate>2020-09-28</PaymentDate>
<Amount>11</Amount>
<Currency>USD</Currency>
</Payment>
<Payment>
<PaymentDate>2020-09-27</PaymentDate>
<Amount>19</Amount>
<Currency>EUR</Currency>
</Payment>
<Payment>
<PaymentDate>2020-09-27</PaymentDate>
<Amount>12</Amount>
<Currency>USD</Currency>
</Payment>
</Payments>
我应该为我的 XSD 做些什么? 谢谢!
答:
0赞
Michael Kay
9/29/2020
#1
这需要带有断言的 XSD 1.1:
<xs:assert test="count(distinct-values(.//Currency)) = 1"/>
我认为 XSD 1.0 没有任何方法可以做到这一点。
评论
0赞
zx485
9/29/2020
我也想出了这样的东西。但它在任何地方都被拒绝了(我创建了一个 MCVE)。它在语法上似乎是正确的,但我无法将其放入 XSD-1.1 验证器的完整场景中。hu.unideb.inf.validator.SchemaValidator
0赞
zx485
9/29/2020
#2
只是为了提供 MCVE(这不应被视为答案):
<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xs:element name="Payments">
<xs:complexType>
<xs:sequence>
<xs:element name="Payment" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="PaymentDate" />
<xs:element name="Amount" />
<xs:element name="Currency" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="count(distinct-values(Payment/Currency)) = 1" />
</xs:complexType>
</xs:element>
</xs:schema>
这是行不通的。
这仅作为其他人在此基础上提供。
评论