xml:通过xslt创建xhtml文档

时间:2013-10-23 11:44:13

标签: xml xslt xhtml

我坚持使用xslt for-each-loop。

xml源文件是:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="party.xsl"?>
<party date="31.12.01">
<guest name="Albert">
    <drink>wine</drink>
    <drink>beer</drink>
    <status single="true" sober="false" />
</guest>
<guest name="Martina">
    <drink>apple juice</drink>
    <status single="true" sober="true" />
</guest>
<guest name="Zacharias">
    <drink>wine</drink>
    <status single="false" sober="false" />
</guest>
</party>

我想获得以下输出:

  • Albert饮料:葡萄酒,啤酒,
  • Martina饮料:苹果汁
  • Zacharias饮料:葡萄酒,

因此我写了以下XSLT文件:

<?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>
    <head></head>
    <body bgcolor="white">
        <xsl:for-each select="party/guest">
        <ul><li><b><xsl:value-of select="@name"/></b>
            <xsl:text> drinks: </xsl:text>
            <xsl:value-of select="drink"/>
            <xsl:text>, </xsl:text>
        </li></ul>
        </xsl:for-each>
    </body>
    </html>
</xsl:template>
</xsl:stylesheet>

使用上面的XSLT文件,我得到以下输出:

  • 阿尔伯特喝酒:酒,
  • Martina饮料:苹果汁,
  • Zacharias饮料:葡萄酒,

我如何更改我的XSLT文件,从显示的客人那里得到所有饮料? 非常感谢您的支持!

1 个答案:

答案 0 :(得分:1)

可能只是嵌套<xsl:for-each select="drink">的另一个级别。

我建议尽量避免使用<xsl:for-each>。另外,不要将所有内容填充到单个“全部模板”中。

<xsl:template match="/">
  <html>
    <head></head>
    <body bgcolor="white">
      <xsl:apply-templates select="party" />
    </body>
  </html>
</xsl:template>

<xsl:template match="party">
  <ul>
    <xsl:apply-templates select="guest" />
  </ul>
</xsl:template>

<xsl:template match="guest">
  <li>
    <xsl:value-of select="concat(@name, ' drinks: ')" />
    <xsl:apply-templates select="drink" />
  </li>
</xsl:template>

<xsl:template match="drink">
  <xsl:value-of select="." />
  <xsl:if test="position() &lt; last()">, </xsl:if>
</xsl:template>