-1

我是 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|
4

1 回答 1

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|
于 2013-03-08T23:39:50.950 回答