0

我有一个具有以下格式的 XML。

<RootNode>
    <Parent>
        <Child1>Some text about child 1</Child1>
        <Child2>Some text about child 2</Child2>
        ....
        ....
        <Child5>Some text about child 5</Child5>
        ....
        ....
        <Childn>Some text about child n</Childn>
    </Parent>
</RootNode>

现在我想针对 xsd 验证这个 xml。

但问题是孩子的数量和节点名称不固定。

请检查我的文件的以下示例

示例 1:节点名称为 Child1 和 Child2 的两个子节点

<RootNode>
    <Parent>
        <Child1>Some text about child 1</Child1>
        <Child2>Some text about child 2</Child2>
    </Parent>
</RootNode>

示例 2:节点名称为 Child4 Child5 和 Child8 的三个子节点

<RootNode>
    <Parent>
        <Child4>Some text about child 4</Child4>
        <Child5>Some text about child 5</Child4>
        <Child8>Some text about child 8</Child8>
    </Parent>
</RootNode>

我想要使​​用以下规则验证子节点内的文本(显示为“关于子 n 的一些文本”)

规则:如果任何子节点(父子节点)的文本长度超过 256,则 xml 无效。

这意味着如果“父”节点的任何子节点的内部文本长度超过 256 个字符,则认为 xml 无效

这可以使用 XSD 模式验证吗?你能帮我创建 .XSD 文件来验证这一点吗?

提前致谢

4

2 回答 2

1

由于子节点的最大数量未知,因此无法自动验证这一点。您可能可以通过编写一些手动验证来获得。

如果您能够更改此 XML 的格式,那么您应该这样做,因为它的设计很糟糕(尤其是因为它不可验证......)。你应该拍摄更多类似的东西:

<RootNode>
    <Parent>
        <Child num="1">...</Child>
        <Child num="2">...</Child>
    </Parent>
</RootNode>

或者,如果父级可以包含其他东西以及子级,那么为子级创建一个容器很有用:

<RootNode>
    <Parent>
        <OtherStuff/>
        <Children>
            <Child num="1">...</Child>
            <Child num="2">...</Child>
        </Children>
        <MoreStuff/>
    </Parent>
</RootNode>
于 2010-11-24T12:19:10.907 回答
0

如前所述,您无法使用 XSD 解决这个问题,因为您事先不知道所有元素名称是什么。如果您不完全依赖 XSD 验证,您可能希望看看Schematron,它可以进行这种验证。

于 2010-11-24T13:03:44.817 回答