我有一个动态生成的 XML 文档,我需要一个函数来消除其中的任何重复节点。
我的函数如下所示:
declare function local:start2() {
let $data := local:scan_books()
return <books>{$data}</books>
};
示例输出为:
<books>
<book>
<title>XML in 24 hours</title>
<author>Some Guy</author>
</book>
<book>
<title>XML in 24 hours</title>
<author>Some Guy</author>
</book>
</books>
我只想要我的书籍根标签中的一个条目,还有其他标签,例如其中的小册子,也需要删除重复项。有任何想法吗?
更新了以下评论。我所说的唯一节点是指删除多次出现的具有完全相同内容和结构的节点。
一种更简单、更直接的单行 XPath 解决方案:
只需使用以下 XPath 表达式:
/*/book
[index-of(/*/book/title,
title
)
[1]
]
例如,当应用于以下 XML 文档时:
<books>
<book>
<title>XML in 24 hours</title>
<author>Some Guy</author>
</book>
<book>
<title>Food in Seattle</title>
<author>Some Guy2</author>
</book>
<book>
<title>XML in 24 hours</title>
<author>Some Guy</author>
</book>
<book>
<title>Food in Seattle</title>
<author>Some Guy2</author>
</book>
<book>
<title>How to solve XPAth Problems</title>
<author>Me</author>
</book>
</books>
上面的 XPath 表达式正确选择以下节点:
<book>
<title>XML in 24 hours</title>
<author>Some Guy</author>
</book>
<book>
<title>Food in Seattle</title>
<author>Some Guy2</author>
</book>
<book>
<title>How to solve XPAth Problems</title>
<author>Me</author>
</book>
说明很简单:对于每一个book
,仅选择其出现之一——这样它的索引就在全书与其第一个索引相同title
in 所有标题.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)