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



有人能帮助我使用XSLT1.0从XML标记中省略重复项吗。

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

输入

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

预期输出:

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

由于一直使用XSLT1.0,因此需要使用muenchian grouping来消除重复的节点。

使用以下定义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代码如下(请参阅方法的注释(

<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>

最新更新