Xml XSD元素名模式匹配

Xml XSD元素名模式匹配,xml,xsd,Xml,Xsd,我试图制作一个XSD来验证从web服务返回的一些XML。它看起来像这样: <values> <value_1>asdf</value_1> <value_2>asdf</value_2> <value_3>asdf</value_3> <value_4>asdf</value_4> <value_5>asdf</value_5>

我试图制作一个XSD来验证从web服务返回的一些XML。它看起来像这样:

<values>
    <value_1>asdf</value_1>
    <value_2>asdf</value_2>
    <value_3>asdf</value_3>
    <value_4>asdf</value_4>
    <value_5>asdf</value_5>
</values>

asdf
asdf
asdf
asdf
asdf

内部值节点的数量是无界的,但它们总是以
\uuu+数字
后缀结尾。是否可以编写一个XSD来验证节点名称本身?

使用XSD 1.0是不可能的。元素必须始终明确列出。

XSD 1.0不可能做到这一点。元素必须始终明确列出。

XSD 1.1解决方案

XSD 1.1解决方案


我认为您无法使用XSD管理名称中的数字迭代,尽管我可能错了。通常,这种XML的经典形式就是
,您可以很容易地在XSD中指出这一点。请参阅(但感谢kjhughes看到了一个替代解决方案!)。我不认为您可以使用XSD管理名称中的数字迭代,尽管我可能是错的。通常,这类XML的经典形式就是
,您可以在XSD中轻松指出。请参阅(但感谢kjhughes看到了替代解决方案!)。XSD 1.1在
xs:any
元素上使用断言。XSD 1.1在
xs:any
元素上使用断言。
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="values">
    <xs:complexType>
        <xs:sequence>
            <xs:any maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:assert test="every $e in * 
                         satisfies matches(local-name($e), 'value_[0-9]+')"/>
    </xs:complexType>
  </xs:element>
</xs:schema>