使用 XQuery/schema 识别 Xml 中的重复标签
Identify duplicate tags in Xml using XQuery/schema
我有一个 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"的元素在第一层出现两次。
子节点的结构并不重要 - 只是不存在具有相同 "top-level" 元素名称的节点。我也不知道子节点的名称。
我该怎么做 - 使用 RelaxNg、XSD 或 XQuery?
谢谢,
杰斯帕
使用XPath/XQuery你可以比较所有标签名称的序列长度是否与所有distinctive标签名称的序列长度相等:
count(*/name()) = count(distinct-values(*/name()))
我有一个 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"的元素在第一层出现两次。
子节点的结构并不重要 - 只是不存在具有相同 "top-level" 元素名称的节点。我也不知道子节点的名称。
我该怎么做 - 使用 RelaxNg、XSD 或 XQuery?
谢谢, 杰斯帕
使用XPath/XQuery你可以比较所有标签名称的序列长度是否与所有distinctive标签名称的序列长度相等:
count(*/name()) = count(distinct-values(*/name()))