0

XSL で以前の状態から内側のループ インデックスをインクリメントする方法。別のグローバル変数を最適に維持するか、組み込み関数を使用するかどうかにかかわらず、最善のアプローチは何でしょうか。私はXSLが初めてなので、提案してください

入力 XML

<A1>
   <X1> ZERO </X1>   
</A1>
<A1>
   <X1> A </X1>
   <X1> B </X1>
</A1>
<A1>
   <X1> C </X1>
   <X1> D </X1>
</A1>
<A1>
   <X1> E </X1>
   <X1> F </X1>
</A1>

期待される出力

Y1 1
Y1 2
Y1 3
Y1 4
Y1 5
Y1 6

次のXSLで私は得ています

Y1 1
Y1 2
Y1 1
Y1 2
Y1 1
Y1 2

.

<xsl:for-each select="A1">
  <xsl:variable name="var:v50" select="position()" />
  <xsl:variable name="var:v51" select="userVBScript:FctNotEqual(string(X1/text()),"ZERO")" />
   <xsl:if test="$var:v51">
     <xsl:for-each select="X1">
       <xsl:variable name="var:v52" select="position()" />
       <Y1>
         <xsl:value-of select="$var:v52" />
       </Y1>  
     </xsl:for-each>
  </xsl:if>
</xsl:for-each>

サンプルコードで提案できますか。

4

1 に答える 1

0

xsl:for-eachこれは、述語フィルターを使用して目的の要素のみを選択することで、より簡単に解決できます。

<xsl:for-each select="A1/X1[not(normalize-space()='ZERO')]">
    <Y1>
        <xsl:value-of select="position()"/>
    </Y1>  
</xsl:for-each>
于 2012-12-25T19:32:22.290 に答える