【问题标题】:xslt nested for-each with comma separated listxslt 嵌套 for-each 用逗号分隔的列表
【发布时间】:2011-09-19 10:35:49
【问题描述】:

我有一个带有爱好列表的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<users>
  <user>
    <fname>somename</fname>
    <hobbies>
      <hobby>Movie</hobby>
      <hobby>Trekking</hobby>
    </hobbies>
  </user>
</users>

Xsl 文件:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <xsl:for-each select="users/user">
          <h2>
            <xsl:value-of select="fname" />
          </h2>
          <h3>Hobbies :</h3>
          <xsl:for-each select="hobbies">
            <xsl:value-of select="." />
                <xsl:if test="position() != last()">
                    <xsl:text> , </xsl:text>
                </xsl:if>
          </xsl:for-each>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

我这里用过

            <xsl:if test="position() != last()">
                <xsl:text> , </xsl:text>
            </xsl:if>

在爱好列表之间生成逗号

但值显示时不带逗号。

我正在http://www.w3schools.com/xsl/ 的 tryit 编辑器上对此进行测试。

这里有什么问题?我该怎么办?

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    你有一个错字,我想:&lt;xsl:for-each select="hobbies/hobby"&gt;

    更新

    正确的 XSLT:

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
            <html>
                <body>
                    <xsl:for-each select="users/user">
                        <h2>
                            <xsl:value-of select="fname" />
                        </h2>
                        <h3>Hobbies :</h3>
                        <xsl:for-each select="hobbies/hobby">
                            <xsl:value-of select="." />
                            <xsl:if test="position() != last()">
                                <xsl:text> , </xsl:text>
                            </xsl:if>
                        </xsl:for-each>
                    </xsl:for-each>
                </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>
    

    输出:

    <html>
      <body>
        <h2>somename</h2>
        <h3>Hobbies :</h3>Movie , Trekking</body>
    </html>
    

    【讨论】:

    • 而不是 ?不,它不起作用。
    • @gt_ebuddy,不。而不是&lt;xsl:for-each select="hobbies"&gt;
    • 还是不行(连列表都没有显示)。你试过我的代码吗?我想提一下:在我的原始代码中,显示了爱好[Movie Trekking],但没有逗号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多