使用XSD进行XML验证

时间:2010-11-24 12:13:30

标签: xml xsd xsd-validation

我有一个格式如下的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文件来验证这个吗?

提前致谢

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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