2010-07-21 34 views
1
<ROWS> 
    <ROW oid="28439"> 
     <EFL eid="8" fid="27672" count="2" Name = "A : bbb"> 
      <MK id="3" val="0"/> 
      <MK id="11" val="0578678"/> 
     </EFL> 
    </ROW> 
</ROWS> 

我有上面的XML,我想在XSL下面的循環檢查是否存在其值的屬性和非空虛

如果名稱在英語標籤屬性存在非空然後
         顯示的名稱屬性的值
否則
         做一些事情(我知道怎麼寫)
ENDIF

請注意,這IF條件將在for-each循環上標籤寫入。所以,這就是爲什麼我們不能使用匹配

謝謝

+2

這不是真的,你不能使用模式匹配。也許你不知道如何。用輸入樣本和期望的輸出來詢問它。人們通過完整的問題得到更好的答案請記住:XSLT是一種聲明性語言。 – 2010-07-21 13:35:53

回答

2

請參閱以下XSL。它的工作原理,但沒有測試角落案件。

<xsl:stylesheet version = '1.0' 
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 

<xsl:template match="/ROWS"> 
    <xsl:for-each select="ROW"> 
     <xsl:choose> 
      <xsl:when test='string-length(EFL/@Name)>0'> 
       <xsl:value-of select="EFL/@Name"/> 
      </xsl:when> 

      <xsl:otherwise>I know what to do here....</xsl:otherwise> 
     </xsl:choose> 
    </xsl:for-each> 
</xsl:template> 

1

亞歷杭德羅的完全正確;推斷圖沙爾的例子:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="yes"/> 

    <xsl:template match="/ROWS"> 
    <xsl:apply-templates select="ROW" /> 
    </xsl:template> 

    <xsl:template match="ROW[string-length(EFL/@Name)>0]"> 
    <xsl:value-of select="EFL/@Name" /> 
    </xsl:template> 

    <xsl:template match="ROW"> 
    <xsl:text>Something else..</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

根據整個問題的性質,這可能是一個更好的選擇;或者是完全有效的。嚴格來說,在這個例子中,即使是模板匹配/ROWS是不必要的,但它可能會更復雜。