我坚持使用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>
我想获得以下输出:
因此我写了以下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文件,我得到以下输出:
我如何更改我的XSLT文件,从显示的客人那里得到所有饮料? 非常感谢您的支持!
答案 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() < last()">, </xsl:if>
</xsl:template>