使用XSD验证节点数量

3

我觉得这不可能,但还是想提一下。给定以下XML:

 <people count="3">
      <person>Bill</person>
      <person>Joe</person>
      <person>Susan</person>
 </people>

在XSD中,是否有可能强制@count属性的值等于定义元素(在此示例中为person元素)的正确计数?上面的示例显然是正确的,而下面的示例将无法验证:

 <people count="5">
      <person>Bill</person>
      <person>Joe</person>
      <person>Susan</person>
 </people>
2个回答

4

我相信XSD不能实现这一点。然而,如果您想保证count属性是下面元素的真实计数,则可以在文档上运行XSLT样式表来确保它是真实的,方法是设置以下值:

<xsl:template match="people">
   <xsl:attribute name="count">
      <xsl:value-of select="count(person)"/>
   </xsl:attibute>
   <xsl:apply-templates/>
</xsl:template>

<!-- insert your identity template here -->

0
实现 XSD 规范 1.1 的解析器应该提供一个 assert 函数,用于验证 XML 内容是否符合子节点数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接