首页 文章

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

提问于
浏览
-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|

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|
    

相关问题