带计数器的XSL循环?

时间:2011-01-27 21:01:50

标签: xml xslt

我有一个xML,它有很多元素,有些看起来像这样:

<Images>
−
<Image>
<FileName>L_03AB1B13144B416A8E779E0010D27156_iList.jpg</FileName>
<SequenceNumber>8</SequenceNumber>
<IsDefault>False</IsDefault>
</Image>
−
<Image>
<FileName>L_36438628E6E343919D77A3D27877A650_iList.jpg</FileName>
<SequenceNumber>9</SequenceNumber>
<IsDefault>False</IsDefault>
</Image>
−
<Image>
<FileName>L_3E0BFE975FA04A46848C3B3D983C4DE7_iList.jpg</FileName>
<SequenceNumber>10</SequenceNumber>
<IsDefault>False</IsDefault>
</Image>
−
<Image>
<FileName>L_DAD3FA64670E40F5BD0B48343216BF76_iList.jpg</FileName>
<SequenceNumber>11</SequenceNumber>
<IsDefault>False</IsDefault>
</Image>
−
<Image>
<FileName>L_2522D5E120574582A926032E1DF4733F_iList.jpg</FileName>
<SequenceNumber>12</SequenceNumber>
<IsDefault>False</IsDefault>
</Image>
</Images>

我想循环使用每个文件名,这对于每个文件都很容易,但我想要计算它,并生成类似的东西(XML):

<pic_1>L_03AB1B13144B416A8E779E0010D27156_iList.jpg</pic_1>

<pic_2>L_36438628E6E343919D77A3D27877A650_iList.jpg</pic_2>
等等......(看看元素,1,2 ...) 我该怎么做呢?

2 个答案:

答案 0 :(得分:7)

以不同的方式命名相同的元素通常是一个坏主意。而不是<pic_1>, <pic_2><pic num="1">, <pic num="2">

稍后使用XML文档时,这会让您的生活更轻松。 XPath查询,XSLT转换,DOM操作 - 任何事情都会更简单,更加一致。

<xsl:template match="Image">
  <pic num="{position()}">
    <xsl:value-of select="FileName" />
  </pic>
</xsl:template>

答案 1 :(得分:6)

使用“xsl:element”标记:

<xsl:element name="pic_{position()}">
  <xsl:value-of select="FileName" />
</xsl:element>