Xml 需要省略/删除XSLT1.0中的重复节点
有人能帮我解决使用XSLT1.0从XML标记中省略重复项的问题吗 我是XSLT新手,非常感谢您的帮助 输入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
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>