2011-11-01 40 views
0

我有以下xml行,我嘗試使用XSLT進行轉換,但遇到了問題。該生產線是XSLT和`foreach`

<app> 
<lem>text</lem> 
<rdg wit="V" type="add.">text1</rdg> 
<rdg wit="S" type="add.">text2</rdg> 
<rdg wit="SV" type="add.">text3</rdg> 
</app> 

我有幾個這樣的app elements的,然後有可能在其中1個4 rdg元素之間,所以我想寫一個foreach語句中foreach聲明,但它無法正常工作。

我想說:

<xsl:for-each select="//tei:app"> 
    <li><xsl:value-of select="tei:lem"/><xsl:text>] </xsl:text> 
     <xsl for-each select="tei:rdg"> <!--I hoping this would loop through each <rdg> within a given <app> element --> 
      <xsl:value-of select="//tei:rdg"/> 
      <xsl:value-of select="//tei:rdg/@type"/> 
      <xsl:value-of select="//tei:rdg/@wit"/> 
     </xsl:for-each> 
    </li> 
</xsl:for-each> 

但現在這是行不通的。就目前而言 - 這樣做的循環數是正確的,但是對於rdg的每個實例,我都會得到拳頭rdg的價值。但是如果我刪除了三個value-of元素中的雙斜槓,那麼我沒有得到任何值。

你能發現我做錯了什麼嗎?有時我會對斜線,雙斜線,xpath中沒有斜槓使用感到困惑 - 我可以在那裏搞定嗎?

感謝您的幫助。

回答

1

試試這個:

<xsl:for-each select="//tei:app"> 
    <li><xsl:value-of select="tei:lem"/><xsl:text>] </xsl:text> 
     <xsl for-each select="tei:rdg"> <!--I hoping this would loop through each <rdg> within a given <app> element --> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="@type"/> 
     <xsl:value-of select="@wit"/> 
     </xsl:for-each> 
    </li> 
</xsl:for-each> 

在你的內部循環的 「當前()」 節點是地:RDG節點。所以。在@訪問各種屬性時訪問它的內容。

+0

繁榮 - 你做到了。這似乎很好地工作。 – Jeff

+0

@Jeff沒問題。 – FailedDev

+1

我的確希望你不只是使用和接受答案,還要明白你做錯了什麼,以及如何避免將來再發生同樣的錯誤。您需要了解xsl:for-each如何設置上下文以及相對路徑和絕對路徑表達式之間的區別。 –