如何使用XSLT将计数器附加到元素名称

时间:2014-10-28 18:13:38

标签: xml xslt

我正在尝试使用XSLT来转换它:

<Parents>
  <Parent>
    <ChildA val="bill" />
    <ChildB val="tom" />
  </Parent>
  <Parent>
    <ChildA val="jake" />
    <ChildB val="sue" />
  </Parent>
</Parents>

进入这个:

<Parents>
  <ChildA1 val="bill" />
  <ChildB1 val="tom" />
  <ChildA2 val="jake" />
  <ChildB2 val="sue" />
</Parents>

&lt; DISCLAIMER&gt; 目标XML不是我为任何目的选择的形状,除了与虐待狂巨魔设计的系统集成。不幸的是,我现在面临其中一个(一个系统,那个;不是一个巨魔)。&lt; / DISCLAIMER&gt;

我从复值元素开始,我需要将他们的孩子合并到一个长列表中。数字用于区分孩子们。

我知道XSLT可用于将单个<Parent>元素转换为其两个Child元素。有没有办法可以利用XSLT转换器中的计数器自动执行附加数字?

1 个答案:

答案 0 :(得分:4)

如果你在

中使用xsl:number那就好了
<xsl:template match="Parents/Parent/*">
  <xsl:variable name="index"><xsl:number level="any"/></xsl:variable>
  <xsl:element name="{name()}{$index}">
    <xsl:copy-of select="@* | node()"/>
  </xsl:element>
</xsl:template>

你可以使用一个数字来构造元素名称,这些数字在不同的级别上计算相同名称的元素,但通常使用XML,如果你真的想要一个索引然后把它放在一个元素名称中就不是一个好主意。进入专用于此目的的属性或子元素。