2013-12-16 88 views
0

我有一個xml看起來像這樣如何重新分配變量的for循環中,並在XSLT使用它以外的for循環1.0

<component name="main"> 
    <component name="sub"> 
     <component name="a"> 
      <issues> 
       <warning> </warning> 
      </issues> 
     </component> 
     <component name="b"> 
      <issues> 
       <warning> </warning> 
      </issues> 
     </component> 
     <component name="c"> 
      <issues> 
       <error> </error> 
      </issues> 
     </component> 
    </component> 
</component> 

我想輸出看起來像下面

"main": [ 
    { 
     composite:"sub" 
     result: "failure" 
    } 
] 

結果可以有3個值。其中列舉如下 成功:沒有錯誤沒有警告 失敗:超過零次失誤 不穩定:零個誤差大於零級的警告

結果應該是基於子組件result.The在上面的例子中「子」有結果失敗,因爲它的一個子組件c有錯誤標記。

我的代碼如下所示。它沒有給我想要的結果。請幫我出

<xsl:param name="error">0</xsl:param> 
<xsl:param name="warning">0</xsl:param> 
<xsl:param name="Success">0</xsl:param> 
<xsl:for-each select="./components/components">  
<xsl:if test="./issues/error">   
<xsl:param name="error" select="'1'" />  
</xsl:if> 
<xsl:if test= "./issues/warning"> 
<xsl:param name="warning" select="'1'" />  
</xsl:if> 
<xsl:if test= "not(./issues/warning) and not(./issues/error)"> 
<xsl:param name="Success" select="'1'" />  
</xsl:if> 
</xsl:for-each> 
<xsl:if test= "$error = '1'"> 
"result":"Failure" 
</xsl:if> 
<xsl:if test="$error !='1' and $warning = '1'"> 
"result":"Unstable" 
</xsl:if> 
<xsl:if test="$error !='1' and $warning != '1' and $warning = '1'"> 
"result":"Success" 
</xsl:if> 

回答

0

不需要的變量:

<xsl:for-each select="./components"> 
    <xsl:text>"result":</xsl:text> 
    <xsl:choose> 
    <xsl:when test="count(./components/issues/error) &gt; 1"> 
     <xsl:text>"Failure"</xsl:text> 
    </xsl:when> 
    <xsl:when test="count(./components/issues/warning) &gt; 1"> 
     <xsl:text>"Unstable"</xsl:text> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>"Success"</xsl:text> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:for-each> 
+0

完蛋了! :) 謝謝 :) – user2179627