marklogic删除重复的节点/元素
我有几千个文档具有重复的元素节点。如何在XML文件中查找和删除重复的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>
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消除重复节点。