duplicates - 如何删除 XQuery 中的重复节点?

标签 duplicates xquery

我有一个动态生成的 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 的第一个索引相同在所有标题中。

关于duplicates - 如何删除 XQuery 中的重复节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644384/

相关文章:

elasticsearch - 面向单词的完成建议器 (ElasticSearch 5.x)

python - 为重复记录创建新的平均分数 [userid, itemid]

r - 使用R在一个非常大的表中消除重复,然后使用剩余的数据计算几个点之间的距离

php - 复杂的应用程序堆栈重构/重新设计策略

xml - XQuery:返回元素的值而不是元素本身

php - 遍历 2 行,合并并删除重复项

r - 如何根据另一列条件删除重复行?

xquery - MarkLogic 8 - XQuery - 如何执行 cts :element-value-query partial match

javascript - 使用 xpath 选择属性和内容?

sql-server - OPENXML 未返回预期结果