我有一个格式如下的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文件来验证这个吗?
提前致谢
答案 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,它可以进行这种验证。