0

我有一个元素'ABC'。对于该元素,有 3 个子元素。a、b 和 c,它们是整数类型。并且元素 c 的最大出现次数是无穷大。如果元素“a”的值为 1,“b”为 2,则“c”的出现次数应为 3。我可以动态设置元素 c 的最大出现次数吗?或基于元素 'a' 和 'b' 的值 例如:参考图片参考代码 截图 参考错误信息 截图 参考值截图

4

1 回答 1

0

XSD 1.1 架构具有xs:assert

   <xs:element name="ABC">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="a" type="xs:integer"/>
                <xs:element name="b" type="xs:integer"/>
                <xs:element name="c" type="xs:string" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:assert id="restrict-occurence" test="count(c) = a + b"/>
        </xs:complexType>
    </xs:element>

这样一个样本就像

<?xml version="1.0" encoding="UTF-8"?>
<ABC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="assert-example1.xsd">
    <a>1</a>
    <b>2</b>
    <c>foo</c>
    <c>bar</c>
    <c>baz</c>
</ABC>

被认为是有效的,而

<?xml version="1.0" encoding="UTF-8"?>
<ABC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="assert-example1.xsd">
    <a>1</a>
    <b>2</b>
    <c>foo</c>
</ABC>

引发关于断言失败的验证错误:Assertion evaluation ('count(c) = a + b') for element 'ABC' on schema type '#AnonType_ABC' did not succeed..

在 oXygen 中使用 Xerces 进行了测试,我这里没有 XMLSpy 进行测试。

确保您使用支持/已启用 XSD 架构 1.1 支持的版本。

于 2021-08-16T09:05:53.640 回答