Xml 需要省略/删除XSLT1.0中的重复节点

Xml 需要省略/删除XSLT1.0中的重复节点,xml,xslt,xpath,Xml,Xslt,Xpath,有人能帮我解决使用XSLT1.0从XML标记中省略重复项的问题吗 我是XSLT新手,非常感谢您的帮助 输入 39184 39184 39184 39186 39186 39186 预期产出: <JdeVariable> <ns0:JDE> <ns0:JdeNumber>39184</ns0:JdeNumber> </ns0:JDE> <ns0:JDE> <ns

有人能帮我解决使用XSLT1.0从XML标记中省略重复项的问题吗

我是XSLT新手,非常感谢您的帮助

输入


39184
39184
39184
39186
39186
39186
预期产出:

<JdeVariable>
    <ns0:JDE>
        <ns0:JdeNumber>39184</ns0:JdeNumber>
    </ns0:JDE>
    <ns0:JDE>
        <ns0:JdeNumber>39186</ns0:JdeNumber>
    </ns0:JDE>
</JdeVariable>

39184
39186

由于您一直使用XSLT1.0,因此需要使用
muenchian分组来消除重复节点

使用以下方法定义
xsl:key

<xsl:key name="key-val" match="ns0:JDE" use="ns0:JdeNumber" />

匹配模板以仅筛选唯一节点

<xsl:template match="ns0:JDE[generate-id() = generate-id(key('key-val', ns0:JdeNumber))]">
    <xsl:copy>
        <xsl:apply-templates select="node()" />
    </xsl:copy>
</xsl:template>

完整的XSLT代码如下所示(有关方法,请参阅注释)


输出

<JdeVariable xmlns:ns0="http://someurl">
    <ns0:JDE>
        <ns0:JdeNumber>39184</ns0:JdeNumber>
    </ns0:JDE>
    <ns0:JDE>
        <ns0:JdeNumber>39186</ns0:JdeNumber>
    </ns0:JDE>
</JdeVariable>

39184
39186

试穿一下。你会找到很多解决这个问题的例子。@aniket V.你能帮我吗pleaseHI@aniket我可以修改这个问题,你能帮我吗。我真的很感谢你的帮助。提前谢谢。。!我已经根据对输入XML的更改更新了解决方案。请确保在XSL中使用由
ns0
标识的正确命名空间。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns0="http://someurl">
    <xsl:output method="xml" />
    <xsl:strip-space elements="*" />

    <xsl:key name="key-val" match="ns0:JDE" use="ns0:JdeNumber" />

    <!-- identity transform template to copy input as is to output -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="ns0:JDE[generate-id() = generate-id(key('key-val', ns0:JdeNumber))]">
        <xsl:copy>
            <xsl:apply-templates select="node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="ns0:JDE" />
</xsl:stylesheet>
<JdeVariable xmlns:ns0="http://someurl">
    <ns0:JDE>
        <ns0:JdeNumber>39184</ns0:JdeNumber>
    </ns0:JDE>
    <ns0:JDE>
        <ns0:JdeNumber>39186</ns0:JdeNumber>
    </ns0:JDE>
</JdeVariable>