XML文件:
<books>
<scifi key=...>
<author>Don Larson</author>
<title>The Edge</title>
<year>...</year>
</scifi>
<scifi key=...>
<author>Don Larson</author>
<author>James Kiddleton</author>
<author>Danny Wobers</author>
<title>Incognitum</title>
<year>1987</year>
</scifi>
<scifi key=...>
<author>....</author>
<author>....</author>
<title>...</title>
<year>...</year>
</scifi>
etc......................
</books>
XSL文件:
<xsl:template match="/">
<html>
<body>
<center><h1>SciFi</h1>
<table border="1">
<tr>
<th>Title</th>
<th>Authors</th>
<th>Year</th>
</tr>
<xsl:for-each select="books/scifi">
<xsl:sort select="year"/>
<tr>
<td><center><xsl:value-of select="title"/></center></td>
<td>
<xsl:for-each select="author">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</td>
<td><xsl:value-of select="year"/></td>
</tr>
</xsl:for-each>
</table>
</center>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
当显示上表时,对于包含标题的每个单元格,其旁边的单元格包含与该标题相关的所有作者
例如:
Title Authors Year
(1cell) (1cell) (1cell)
----- ------- ----
Don Larson
Incognitum James Kiddleton 1987
Danny Wobers
现在我要做的是每个标题显示作者(如果有多个是......)在不同的单元格中与它相关并改为:
Title Authors Year
(3cells) (3cells) (3cells)
----- ------- ----
Incognitum Don Larson 1987
Incognitum James Kiddleton 1987
Incognitum Danny Wobers 1987
我没有一个单元格用于标题,一个单元格包含与该标题相关的所有三个作者,我希望有三个具有相同标题的单元格,并且每个单元格都可以在其旁边有一个与相关作者相关的单元格。 / p>
我仍然希望继续对所有内容进行排序,我仍然希望我的单元格的顺序(左 - >右)为Title-&gt; Author-&gt; Year
我的XSL文件需要更改什么?
答案 0 :(得分:0)
每个作者需要一行,因此请更改
<tr>
<td><center><xsl:value-of select="title"/></center></td>
<td>
<xsl:for-each select="author">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</td>
<td><xsl:value-of select="year"/></td>
</tr>
到
<xsl:for-each select="author">
<tr>
<td><center><xsl:value-of select="../title"/></center></td>
<td>
<xsl:value-of select="."/>
</td>
<td><xsl:value-of select="../year"/></td>
</tr>
</xsl:for-each>
大卫
答案 1 :(得分:0)
快速修复
<xsl:template match="/">
<html>
<body>
<center><h1>SciFi</h1>
<table border="1">
<tr>
<th>Title</th>
<th>Authors</th>
<th>Year</th>
</tr>
<xsl:for-each select="books/scifi">
<xsl:sort select="year"/>
<xsl:for-each select="author">
<tr>
<td><center><xsl:value-of select="../title"/></center></td>
<td>
<xsl:for-each select=".">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</td>
<td><xsl:value-of select="../year"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</center>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
但是从长远来看,我建议从一个模板移动到嵌套for-eachs到结构化样式表,模板将每个元素类型映射到结果,然后执行apply-templates以继续。