0

我的 XML 结构如下所示:

<myElement>
    <start>0</start>
</myElement>
<myElement>
    <start>5</start>
</myElement>
<myElement>
    <start>7</start>
</myElement>
<myElement>
    <start>14</start>
</myElement>

现在我的验证规则如下:每个“myElement”元素都将包含一个“start”元素。此元素的整数值不能小于前面的“myElement”->“start”。因此,例如这将是无效的:

<myElement>
    <start>14</start>
</myElement>
<myElement>
    <start>7</start>
</myElement>

这样的规则怎么可能看起来像xs:assert- 元素?

4

1 回答 1

2

对的,这是可能的。这样的断言应该满足您的需求:

<xs:assert test="max(preceding::start) &lt; number(.) or empty(preceding::start)"></xs:assert>

在第一部分中,检查最大的先前start值是否仍低于正在检查的当前值。

第二部分(or empty(preceding::start))只是为了克服第一部分的失败,因为第一个start标签不会呈现任何要比较的值。

它应该以这种方式添加到您的关联模式中 - 包装complexType是以下内容模型myElement

               <xs:complexType>
                   <xs:sequence>
                       <xs:element name="start" type="xs:integer" />
                   </xs:sequence>
                   <xs:assert test="max(preceding::start) &lt; number(.) or empty(preceding::start)"></xs:assert>
               </xs:complexType>
于 2015-03-31T09:06:21.830 回答