我是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|
答案 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],
' ')"/>
</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|