这是我的源xml:如何检查Element-4中是否有重复的值,并替换重复的值以使其唯一?
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>1234</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>4321</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>5678</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>8765</Element-4>
<Element-5>AA</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>如何查找重复的值?在上面的xsl中,它将是00378和00666。保留第一个值,将第二个值替换为唯一值,如00378A,第三个vlue替换为00378B,依此类推。预期的结果将是:
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>1234</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>4321</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378A</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>5678</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>8765</Element-4>
<Element-5>AA</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666A</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666B</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>发布于 2018-10-09 02:54:24
一种方法(可能不是最有效的,但很简单)是计算前面具有相同值的元素。您可以使用xsl:number将格式设置为字母。
例如。
XML Input (包装在doc中以使格式正确)
<doc>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>1234</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>4321</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>5678</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>8765</Element-4>
<Element-5>AA</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
</doc>XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Element-4">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:if test="preceding::Element-4[.=current()]">
<xsl:number value="count(preceding::Element-4[.=current()])" format="A"/>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>输出
<doc>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>1234</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>4321</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00378A</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>5678</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>8765</Element-4>
<Element-5>AA</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666A</Element-4>
<Element-5>ZZ</Element-5>
</Segment-PO>
<Segment-PO>
<Element-3>IN</Element-3>
<Element-4>00666B</Element-4>
<Element-5>BB</Element-5>
</Segment-PO>
</doc>工作小提琴:http://xsltfiddle.liberty-development.net/94hvTzU
https://stackoverflow.com/questions/52708305
复制相似问题