首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在XQuery中删除重复的节点?

如何在XQuery中删除重复的节点?
EN

Stack Overflow用户
提问于 2009-03-13 20:03:08
回答 5查看 18.1K关注 0票数 16

我有一个动态生成的XML文档,我需要一个函数来消除其中的任何重复节点。

我的函数如下所示:

代码语言:javascript
复制
declare function local:start2() {
    let $data := local:scan_books()
    return <books>{$data}</books>
};

示例输出为:

代码语言:javascript
复制
<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>

我只想要我的图书根标签中的一个条目,还有其他标签,比如里面的小册子也需要去掉重复的内容。有什么想法吗?

更新了以下评论。我所说的唯一节点是指删除具有完全相同的内容和结构的节点的多个实例。

EN

回答 5

Stack Overflow用户

发布于 2010-03-11 13:44:52

您可以使用内置的distinct-values()函数...

票数 5
EN

Stack Overflow用户

发布于 2009-03-13 22:50:38

我通过实现递归的唯一性搜索功能解决了这个问题,该功能仅基于文档的文本内容进行唯一性匹配。

代码语言:javascript
复制
declare function ssd:unique-elements($list, $rules, $unique) {
    let $element := subsequence($rules, 1, 1)
    let $return :=
    if ($element) then
        if (index-of($list, $element) >= 1) then
            ssd:unique-elements(insert-before($element, 1, $list), subsequence($rules, 2), $unique)
        else <test>
            <unique>{$element}</unique>
            {ssd:unique-elements(insert-before($element, 1, $list), subsequence($rules, 2), insert-before($element, 1, $unique))/*}
            </test>
    else ()
    return $return
};

调用方式如下:

代码语言:javascript
复制
declare function ssd:start2() {
    let $data := ()
    let $sift-this := 
       <test>
           <data>123</data>
           <data>456</data>
           <data>123</data>
           <data>456</data>
           <more-data>456</more-data>
       </test>
    return ssd:unique-elements($data, $sift-this/*, ())/*/*
};

ssd:start2()

输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<data>123</data>
<data>456</data>

我猜如果你需要稍微不同的等价匹配,你可以相应地改变算法中的匹配。不管怎么说,这应该能让你入门。

票数 1
EN

Stack Overflow用户

发布于 2010-05-30 03:02:43

那么fn:distinct-values呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/644384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档