2013-03-07 74 views
-1

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

任何帮助表示赞赏。

谢谢。

<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

你要什么你的输出是什么样子? – 2013-03-07 20:59:18

+0

我希望结果如下所示: abc | 22 | 2.5 | 0 abc | 2 | 1.8 | 2 abc | 3 | 19.9 | – 2013-03-08 19:35:50

回答

0

从输出你描述它看起来像你想生成行的列是儿童1,N,N + 1,N 2对所有的n,使得N模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| 
+0

谢谢。这正是我正在寻找的:) – 2013-03-11 14:55:12

相关问题