marklogic删除重复的节点/元素

marklogic删除重复的节点/元素,marklogic,Marklogic,我有几千个文档具有重复的元素节点。如何在XML文件中查找和删除重复的title元素 我使用fn:distict-values()会导致性能问题 例如: 01.xml 1. 头优先JavaScript 头优先JavaScript 02.xml <doc> <pdf>0</pdf> <title>Python: Programming Basics for Absolute Beginners </title>

我有几千个文档具有重复的元素节点。如何在XML文件中查找和删除重复的
title
元素

我使用
fn:distict-values()
会导致性能问题

例如: 01.xml


1.
头优先JavaScript
头优先JavaScript
02.xml

<doc>
    <pdf>0</pdf>
    <title>Python: Programming Basics for Absolute Beginners </title>
    <title>Python: Programming Basics for Absolute Beginners </title>
</doc>
<doc>
    <pdf>0</pdf>
    <title>Python: Programming Basics for Absolute Beginners </title>

</doc>

0
Python:绝对初学者的编程基础
Python:绝对初学者的编程基础
结果: 01.xml


1.
头优先JavaScript
02.xml

<doc>
    <pdf>0</pdf>
    <title>Python: Programming Basics for Absolute Beginners </title>
    <title>Python: Programming Basics for Absolute Beginners </title>
</doc>
<doc>
    <pdf>0</pdf>
    <title>Python: Programming Basics for Absolute Beginners </title>

</doc>

0
Python:绝对初学者的编程基础

我建议您运行一个作业,并分别处理每个文档。那么,您为每个文档运行的确切代码就不那么重要了,只要它能够工作。如果你有一个庞大的数据集,你可以让它在一夜之间运行。

删除重复的
title
元素的最简单方法之一是使用XSLT转换

xquery version "1.0-ml";
declare variable $XSLT :=
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <!-- This identity template copies all content by default -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <!--This template matches (and removes) the duplicate title elements 
        You could match more generically on any element * or add other match criteria
       -->
    <xsl:template match="title[text() = preceding-sibling::title[1]/text()]"/>

</xsl:stylesheet>;

xdmp:xslt-eval($XSLT, 
  <doc>
    <pdf>0</pdf>
    <title>Python: Programming Basics for Absolute Beginners </title>
    <title>Python: Programming Basics for Absolute Beginners </title>
  </doc>
)
xquery版本“1.0-ml”;
声明变量$XSLT:=
;
xdmp:xslt eval($xslt,
0
Python:绝对初学者的编程基础
Python:绝对初学者的编程基础
)
如果只有几千个文档,那么您可能能够在一个模块执行中转换并保存它们


否则,按照@hunterhacker的建议在作业中应用转换将确保您不必担心超时问题,因为您可以将工作拆分为单独的执行。

您好,请测试附加的代码

    let $doc :=
<doc>
    <title>Head First JavaScript</title>
     <title>Head First JavaScript</title>
     <title>hellao</title>
     <title>hello</title>
     <title>hello</title>
     <title>Python: Programming Basics for Absolute Beginners </title>
     <title>ahello</title>
     <title>Python: Programming Basics for Absolute Beginners </title>
</doc>

for $data in $doc//title[not(. = preceding-sibling::node())]
return $data
let$doc:=
头优先JavaScript
头优先JavaScript
赫劳
你好
你好
Python:绝对初学者的编程基础
阿赫洛
Python:绝对初学者的编程基础
对于$doc//title中的$data[非(.=前面的同级::节点())]
返回$data

Sudeep,非常感谢。我将使用corb消除重复节点。