2011-09-12 35 views
2

我有一個像這樣的xml棧;如何使用xslt遍歷xml

<translations> 
    <message1>A message</message1> 
    <message2>A second message</message2> 
</translations> 

使用XSLT和換的每個方法,怎樣可以得到名稱(MESSAGE1,消息2)和值(消息,第二消息)作爲鍵/值對]

EDIT?:

我期望的輸出將用於生成一個JavaScript對象,例如

<script type="text/javascript"> 
    var t = { 
    <xsl:value-of select="name()" /> : '<xsl:value-of select="." />' 
    } 
</script> 

明顯高於不工作,但那是我最初的想法...

回答

2
<xsl:template match="/"> 
    <script type="text/javascript"> 
     <xsl:text>var t = {</xsl:text> 
     <xsl:for-each select="translations/*"> 

      <xsl:value-of select="concat(name(), ' : ')" /> 
      <xsl:text>'</xsl:text> 
      <xsl:value-of select="." /> 
      <xsl:text>'</xsl:text> 
      <xsl:if test="position() != last()"> 
       <xsl:text>,</xsl:text> 
      </xsl:if> 
      <xsl:text>&#xA;</xsl:text> 
     </xsl:for-each> 
     <xsl:text>}</xsl:text> 
    </script> 
</xsl:template> 

輸出:

<script type="text/javascript">var t = {message1 : 'A message', 
message2 : 'A second message' 
}</script> 
+0

這幾乎適用於我,但'var t = {'和'};'需要放置在循環之外。另外我怎樣才能確定我是否在最後一個節點,以便我可以忽略逗號(,)? – Kevin

+0

@凱文,我更新了我的答案。 –

+0

太棒了!那很完美! – Kevin

0

你可以試試這個:

<xsl:template match="translations"> 
    <xsl:for-each select="*"> 
    <kvp key="{name()}" value="{.}"/> 
    </xsl:for-each> 
</xsl:template>