任何人都可以帮助我,需要使用XSLT 1.0省略XML标记中的重复项。
我是XSLT的新手,非常感谢您的帮助。
输入
thingFunction
预期输出:
<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>
答案 0 :(得分:0)
由于您坚持使用XSLT 1.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>