首页 > 解决方案 > XSLT 用每个标签的计数在 XML 中转换一些标签

问题描述

如何转换具有以下内容的 XML:

<info>
   .....
   <name>aaa</name>
</info>
<info>
   .....
   <name>bbb</name>
</info>
<info>
   .....
   <name>ccc</name>
</info>

用 XSLT 变成这样的东西:

<info>
   .....
   <name1>aaa</name1>
</info>
<info>
   .....
   <name2>bbb</name2>
</info>
<info>
   .....
   <name3>ccc</name3>
</info>

有人有什么想法吗?谢谢!

标签: xmlxslt

解决方案


一种方法是count(...)preceding-sibling::轴结合使用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- Identity template -->    
    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
      </xsl:copy>
    </xsl:template>

    <!-- Modify all 'name' elements -->
    <xsl:template match="name">
      <xsl:element name="{concat(name(),count(../preceding-sibling::info)+1)}">
        <xsl:apply-templates select="node()|@*" />
      </xsl:element>
    </xsl:template>

</xsl:stylesheet>

输出如所愿。


推荐阅读