增量元素名称的XML模式列表

时间:2019-06-06 12:19:46

标签: xml xpath xsd

使用xml模式,如何验证具有递增元素名称的xml文件?

示例: xml:

<liste_of_element>
    <element_1> ...... </element_1>
    <element_2> ...... </element_2>
    <element_3> ...... </element_3>
</liste_of_element>

3 个答案:

答案 0 :(得分:2)

这是一个不良的XML设计,而不良的XML设计的症状之一通常是XSD不允许您对其进行验证。

如果确实需要,可以使用XSD 1.1断言来做到这一点:

<xs:assert test="every $e in child::* 
                 satisfies local-name($e) = 
                           concat('element_', count(preceding-sibling::*) + 1"/>

但是我真的建议更改设计。序列号不提供任何额外的信息,并且使处理XML(无论您使用哪种处理API或语言)都变得更加困难。

答案 1 :(得分:0)

以我的经验,w3schools.com是学习XML,XML Schema等的好地方。它是免费阅读且可靠的。

要搜索的关键字是序列。参见:https://www.w3schools.com/xml/el_sequence.asp

答案 2 :(得分:0)

仅出于完整性考虑:这是一个非常糟糕的XML设计。
XML的目的之一就是避免这种情况。

看来,这种SO答案"Can I use regular expressions in XML Schema element names?"表示的XSD 1.0完全不支持这种命名方案。

与这种元素名称匹配的XPath表达式为

concat('element_',position())

,但是由于上述情况,这不能在XSD 1.0中表示。 XSD 1.1中也许有一种方法。