簡體   English   中英

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 做什么? 謝謝!

這需要帶有斷言的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM