2012-12-25 28 views
0

如何將內部循環索引從XSL中的先前狀態增加。最佳方法是什麼?是否最好保持單獨的全局變量或使用任何內置函數。我是新來的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> 

你可以建議一個示例代碼。

回答

0

這可能與單個xsl:for-each更簡單地解決了一個過濾器謂語僅選擇所需的元素:

<xsl:for-each select="A1/X1[not(normalize-space()='ZERO')]"> 
    <Y1> 
     <xsl:value-of select="position()"/> 
    </Y1> 
</xsl:for-each>