【发布时间】:2016-07-25 04:44:36
【问题描述】:
我正在尝试使用 XML 和 XSLT 文件创建一段 XHTML。
我想测试两个或多个 XML 元素的值是否与表中的其他元素一致,在这种情况下,我希望将这些单元格合并到结果 XHTML 文件中。
为了简单起见,我将使用一个简单的 w3schools 示例。 (更多人应该在 stackoverflow 上这样做)。
这是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
</cd>
<cd>
<title>Empire Burlesque</title>
<artist>Bonnie Tyler</artist>
</cd>
<cd>
<title>Empire Burlesque</title>
<artist>Mr G</artist>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
</cd>
</catalog>
这是 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<xsl:choose>
<xsl:when test="count(title) %gr 2">
<td rowspan="2"><xsl:value-of select="title"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="title"/></td>
</xsl:otherwise>
</xsl:choose>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT 中有两个错误的元素是:TEST 和 ROWSPAN。
如何测试一个标题是否有多个实例? (在这种情况下是帝国滑稽剧)
在这种情况下,我如何告诉程序将这两个单元格(因此输出是一个显示 Empire Burlesque 的单元格)与行跨度 3 合并。
注意:请不要告诉我 test='Empire Burlesque'。如果我在哪里添加它们,我希望它适用于其他重复实例。谢谢。
【问题讨论】:
-
像这样分组问题的解决方案在很大程度上取决于您使用的是 XSLT 1.0 还是 2.0(在 2.0 中要容易得多!)。所以你需要告诉我们你的目标是哪个版本。