使用XSLT在节点内循环遍历不同名称的子元素

时间:2013-03-07 19:19:30

标签: xml xslt loops tags

我是XSLT的新手。我有以下xml,并想知道我们如何使用XSLT循环遍历A的每个元素来获取它们的值。此外,对于每个元素,如果位置mod 3 = 2,则获取该元素值及其下一个元素值。例如, - 因为02 mod 3 = 2,得到值22和2.5,依此类推。

感谢任何帮助。

谢谢。

<A>
 <A01>abc</A01>
 <A02>22</A02>
 <A03>2.5</A03>
 <A04>0</A04>
 <A05>2</A05>
 <A06>1.8</A06>
 <A07>2</A07>
 <A08>3</A08>
 <A09>1.9</A09>
</A>
<A>
 <A01>abb</A01>
 <A02>22</A02>
 <A03>1.5</A03>
 <A04/>
</A>

我希望结果如下所示:

abc|22|2.5|0
abc|2|1.8|2
abc|3|1.9|
abb|22|1.5|

1 个答案:

答案 0 :(得分:0)

从你描述的输出看起来你想要生成所有n的列为子1,n,n + 1,n + 2的行,这样n mod 3 = 2。

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

  <xsl:template match="/">
    <xsl:apply-templates select="*/A/*[(position() mod 3) = 2]"/>
  </xsl:template>

  <xsl:template match="*">
    <xsl:value-of select="concat(../*[1],'|', ., '|',
        following-sibling::*[1], '|', following-sibling::*[2],
        '&#10;')"/>
  </xsl:template>
</xsl:stylesheet>

当应用于以下XML时(您的示例包含在另一个根元素中以使其格式正确)

<root>
<A>
 <A01>abc</A01>
 <A02>22</A02>
 <A03>2.5</A03>
 <A04>0</A04>
 <A05>2</A05>
 <A06>1.8</A06>
 <A07>2</A07>
 <A08>3</A08>
 <A09>1.9</A09>
</A>
<A>
 <A01>abb</A01>
 <A02>22</A02>
 <A03>1.5</A03>
 <A04/>
</A>
</root>

此样式表生成正确的结果

abc|22|2.5|0
abc|2|1.8|2
abc|3|1.9|
abb|22|1.5|