0
我称为我的一个老的线程重命名相同的内容重复的元素,因为我有类似的问题,以这样一种: XSLT 1.0: rename elements with same contentXSLT 1.0:使用计数器
我有下面的XML源。在每个Item
元素中,我有孩子可能具有相同的值,例如在第3个Item
我有两个孩子的值为“ZA南非”和“SPAR WC”。 这些我必须用一个后缀“make unique”,例如一个计数器号码。
这是源:
<?xml version="1.0" encoding="UTF-8"?>
<EntityGroup>
<Item>
<ENTITY_GROUP_CODE>0000004644</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>CHECKERS</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>OK KZN</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5/>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000004612</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5/>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000056016</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>SPAR WC</ENTITY_GROUP_LEVEL5>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000056020</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>SUPERSPAR WC</ENTITY_GROUP_LEVEL5>
</Item>
</EntityGroup>
我想出了这个XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output encoding="UTF-8" method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Item">
<Item>
<xsl:apply-templates select="@*|node()">
<xsl:with-param name="number">
<xsl:number/>
</xsl:with-param>
</xsl:apply-templates>
</Item>
</xsl:template>
<xsl:template match="Item/child::*">
<xsl:param name="number"/>
<xsl:element name="{local-name()}">
<xsl:value-of select="concat(.,'-',count(preceding-sibling::*[. = current()]))"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
它给出了这样的输出:
<?xml version="1.0" encoding="UTF-8"?>
<EntityGroup>
<Item>
<ENTITY_GROUP_CODE>0000004644-0</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA-0</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY-0</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>CHECKERS-0</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>OK KZN-0</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>-0</ENTITY_GROUP_LEVEL5>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000004612-0</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA-0</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY-0</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR-0</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC-0</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>-0</ENTITY_GROUP_LEVEL5>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000056016-0</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA-0</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA SOUTH AFRICA-1</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR-0</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC-0</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>SPAR WC-1</ENTITY_GROUP_LEVEL5>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000056020-0</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA-0</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY-0</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR-0</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC-0</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>SUPERSPAR WC-0</ENTITY_GROUP_LEVEL5>
</Item>
</EntityGroup>
但我期待这个输出 - 请注意第三个元素。我只希望 内Item
元素的重复值是带有后缀:
<?xml version="1.0" encoding="UTF-8"?>
<EntityGroup>
<Item>
<ENTITY_GROUP_CODE>0000004644</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>CHECKERS</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>OK KZN</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5/>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000004612</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5/>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000056016</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA SOUTH AFRICA-1</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>SPAR WC-1</ENTITY_GROUP_LEVEL5>
</Item>
<Item>
<ENTITY_GROUP_CODE>0000056020</ENTITY_GROUP_CODE>
<ENTITY_GROUP_LEVEL1>ZA SOUTH AFRICA</ENTITY_GROUP_LEVEL1>
<ENTITY_GROUP_LEVEL2>ZA GROCERY</ENTITY_GROUP_LEVEL2>
<ENTITY_GROUP_LEVEL3>SPAR</ENTITY_GROUP_LEVEL3>
<ENTITY_GROUP_LEVEL4>SPAR WC</ENTITY_GROUP_LEVEL4>
<ENTITY_GROUP_LEVEL5>SUPERSPAR WC</ENTITY_GROUP_LEVEL5>
</Item>
</EntityGroup>
能否请你帮我出。谢谢。
最佳regarsd, 彼得
谢谢Rudramuni,它工作得很好。我只添加了“”检查空元素。对于清空逻辑不能应用。祝好, –
Peter
2014-11-05 07:59:27
欢迎彼得,不错的逻辑代码u编码,现在它将是一个完整的。我编辑了我的答案。 – 2014-11-05 09:30:31