Html XML解析:如何将相同类型的同级分离到不同的单元中?
XML文件:Html XML解析:如何将相同类型的同级分离到不同的单元中?,html,xml,xslt,xpath,Html,Xml,Xslt,Xpath,XML文件: <books> <scifi key=...> <author>Don Larson</author> <title>The Edge</title> <year>...</year> </scifi> <scifi key=...> <author>Don Larson&
<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>
现在,我要做的是为每个标题在单独的单元格中显示与之相关的作者(如果有多个作者…),并得到如下内容:
Title Authors Year
(3cells) (3cells) (3cells)
----- ------- ----
Incognitum Don Larson 1987
Incognitum James Kiddleton 1987
Incognitum Danny Wobers 1987
我不想让一个单元格作为标题,一个单元格包含与该标题相关的所有三位作者,我想让三个单元格具有相同的标题,每个单元格旁边都可以有一个单元格,旁边有一位相关作者
我仍然希望继续按yeat对所有内容进行排序,并且我仍然希望单元格的顺序(左->右)为Title->Author->Year
我必须在XSL文件中更改哪些内容?您希望每个作者都有一行,所以请更改
<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>
到
David快速修复是
<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 each实现所有功能)转移到结构化样式表(使用将每个元素类型映射到结果的模板),然后使用应用模板继续进行操作。谢谢,正如您所见,我已编辑了我的问题,并添加了html文件的一个片段,我只想在用户单击“作者”按钮时,通过jscript函数应用您建议的更改。当涉及到我必须在
setAttribute
等中进行的更改时,我有点不知所措。。。这方面有什么帮助吗?我不使用那个API,但使用.evaluate(用于计算源代码中的xpath表达式,您不能只提取程序的随机行并断章取义地进行计算。感谢您的回答Martin,看看我给David留下的评论,告诉我您的想法:)我认为您最初的XSLT问题已经得到了回答和解决,如果您需要帮助,您应该发布一个新的问题,标记为Javascript。我听从了您的建议。如果你想再帮我一点,请尽管说:)谢谢!
<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>
<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>