[英]How to define XML element in xsd schema to make all child elements to have same attribute value?
[英]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 做什么? 謝謝!
這需要帶有斷言的 XSD 1.1:
<xs:assert test="count(distinct-values(.//Currency)) = 1"/>
我認為 XSD 1.0 沒有辦法做到這一點。
只是為了提供 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>
它不起作用。
這僅作為其他人進行此工作的基礎。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.