如何使用xslt迭代xml

时间:2011-09-12 09:22:47

标签: xml xslt xpath

我有像这样的xml堆栈;

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

使用xslt和for-each方法,如何将名称(message1,message2)和值(消息,第二条消息)作为键/值对获取?]

编辑:

我想要的输出将用于生成javascript对象,例如

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

显然上述情况不起作用,但那是我最初的想法......

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

你可以试试这个:

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