这是我的源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>
答案 0 :(得分:1)
一种方法(可能不是最有效的,但很容易)是对具有相同值的前面的元素进行计数。您可以使用xsl:number
来设置字母格式。
示例...
XML输入(用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>