2011-11-04 183 views
1

我看起來像一個XML文件:XSLT:for-each for for-each not working?

<VersionHistory> 
    <Release Version="0.0.1" Date="27/1/2011"> 
    <NewFeature>foo</NewFeature> 
    <BugFix>some text</BugFix> 
    <BugFix>some text</BugFix> 
    <BugFix Ticket="12004">some text</BugFix> 
    </Release> 
    <Release Version="0.0.2" Date="15/2/2011"> 
    <NewFeature>foobar</NewFeature> 
    <BugFix>some more text</BugFix> 
    <BugFix>some more text</BugFix> 
    <BugFix Ticket="12001">some more text</BugFix> 
    </Release> 
</VersionHistory> 

現在我的XSLT是這樣的:

<xsl:template match="/"> 
    <xsl:for-each select="VersionHistory/Release"> 
     <xsl:sort select="@Version"/> 
    <ul> 
     <li> 
      <h3>New Feature<br/></h3> 
      <xsl:for-each select="NewFeature"> 
      <ul> 
       <li> 
       <xsl:value-of select="NewFeature"/> 
       </li> 
      </ul> 
      </xsl:for-each> 
     </li> 
     <h3> 
      Fixed<br/> 
      </h3> 
      <xsl:for-each select="BugFix"> 
       <ul> 
       <li> 
        <p> 
        <xsl:value-of select="BugFix"/> 
        </p> 
       </li> 
       </ul> 
      </xsl:for-each> 
     </li> 
... 

我的問題是,它經過了錯誤修正的for-each第二創建列表項目的XML包含這個元素..但我沒有得到之間的文本。爲什麼? 我該如何解決這個問題?

這不僅是當然的bug修正..它的這一切元素,如修正錯誤,NewFeature(有一些更多的..我這裏就不一一列舉)

迎接

+1

不要使用'for-each' - 使用模板。 – Oded

+0

每個版本可以有多個新版本嗎? – Remy

+0

是的,可以有多個 – darkdog

回答

5

在你for-each你選擇NewFeature,然後在value-of,您呼叫稱爲NewFeature一個子節點的價值:

 <xsl:for-each select="NewFeature"> 
     <ul> 
      <li> 
      <xsl:value-of select="NewFeature"/> 
      </li> 
     </ul> 
     </xsl:for-each> 

由於NewFeature不包含包含 a NewFeature節點,您什麼都看不到。

這會工作(選擇在for-each迴路當前節點):

 <xsl:for-each select="NewFeature"> 
     <ul> 
      <li> 
      <xsl:value-of select="."/> 
      </li> 
     </ul> 
     </xsl:for-each> 

但更好的選擇是使用一個模板(你應該與所有for-each循環到):

<xsl:template match="NewFeature"> 
    <ul> 
    <li><xsl:value-of select="."/></li> 
    </ul> 
</xsl:template> 
+0

謝謝。對我來說工作正常 – darkdog