-1

私は XSLT が初めてです。次の xml があり、XSLT を使用して A の各要素をループして値を取得する方法を考えています。また、各要素について、position 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 mod 3 = 2 のようなすべての n に対して、列が子 1、n、n+1、n+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 に答える