使用XQuery / schema识别Xml中的重复标记

时间:2015-05-28 06:06:28

标签: xquery xsd-validation relaxng

我有一个Xml片段,我需要验证第一级每个节点只有一个发生点(从0开始)。

坏Xml的一个例子就是:

<library>
  <book1>
    <title>My first book</title>
    <PageNum>101</PageNum>
  </book1>
  <book2>
    <title>My second book</title>
  </book2>
  <book1>
    <title>Another of my first book</title>
  </book1>
  <book3>
    <title>My third book</title>
    <PageNum>101</PageNum>
  </book3>
</library>

...因为在第一级有两个元素名称为“book1”的元素。

子节点的结构并不重要 - 只是没有具有相同“顶级”元素名称的节点。我也不知道子节点的名称。

我该怎么做 - 使用RelaxNg,XSD或XQuery?

谢谢, 的Jesper

1 个答案:

答案 0 :(得分:0)

使用XPath / XQuery,您可以比较所有标记名称的序列长度是否等于所有独特标记名称序列的长度:

count(*/name()) = count(distinct-values(*/name()))