2011-09-12 16 views
2

私はこのようなxmlスタックを持っています。 XSLTを用いxsltを使ってxmlを反復する方法

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

ため、それぞれの方法、私は名前のキー/値のペアとして(メッセージ1、メッセージ2)および値(メッセージ、第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> 
関連する問題