首页 > 解决方案 > 如何使用 xpath 或 java 脚本从 XML 中检索重复节点

问题描述

下面是我的输入xml。

<?xml version="1.0" encoding="UTF-8"?>

<Hierarchy>

<Records>

<Org_Unit_Name>ABC</Org_Unit_Name>

<Parent_Org_Unit>123</Parent_Org_Unit>

</Records>

<Records>

<Org_Unit_Name>ABC</Org_Unit_Name>

<Parent_Org_Unit>DEF</Parent_Org_Unit>

</Records>

<Records>

<Org_Unit_Name>456</Org_Unit_Name>

<Parent_Org_Unit>879</Parent_Org_Unit>

</Records>

</Hierarchy>

我只想提取重复值。所以输出应该如下

<?xml version="1.0" encoding="UTF-8"?>

<Hierarchy>

<Records>

<Org_Unit_Name>ABC</Org_Unit_Name>

<Parent_Org_Unit>123</Parent_Org_Unit>

</Records>

<Records>

<Org_Unit_Name>ABC</Org_Unit_Name>

<Parent_Org_Unit>DEF</Parent_Org_Unit>

</Records>

我在 xpath/xslt 中尝试了前面的轴,但在 java 脚本中没有用和唯一(错误),但我无法检索预期的输出。请指导我如何继续前进。

问候,

阿穆克塔

标签: javaxmlxsltgroovyduplicates

解决方案


假设“重复”表示Records具有相同Org_Unit_Name值的元素,您可以使用Muenchian grouping的变体:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:key name="Records-by-Org_Unit_Name" match="Records" use="Org_Unit_Name" />

<xsl:template match="/Hierarchy">
    <xsl:copy>
        <xsl:copy-of select="Records[count(key('Records-by-Org_Unit_Name', Org_Unit_Name)) > 1]"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

推荐阅读