Xml XSD元素名模式匹配
我试图制作一个XSD来验证从web服务返回的一些XML。它看起来像这样: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>
<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>