XSLT实现按作者重复显示书籍:解决姓名缺失问题
解决方案:按作者重复显示书籍信息
问题原因
- 原XSLT中
firstname和lastname的选择路径错误,这两个节点属于authors/author的子节点,并非book的直接子节点,因此无法获取到对应值。 - 原代码仅遍历
book节点,未遍历每个书籍下的author节点,无法实现“每个作者对应显示一次书籍信息”的需求。
修改后的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> <head> <title>Books</title> </head> <body> <xsl:for-each select="books/book"> <!-- 遍历当前书籍下的每个作者 --> <xsl:for-each select="authors/author"> <p>FirstName: <xsl:value-of select="firstname" /></p> <p>LastName: <xsl:value-of select="lastname" /></p> <p>Book: <xsl:value-of select="../../name" /></p> <p>Year: <xsl:value-of select="../../year" /></p> <!-- 添加分隔线区分不同作者的条目 --> <hr /> </xsl:for-each> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
代码说明
- 新增内层
xsl:for-each select="authors/author",遍历当前书籍下的所有作者,确保每个作者对应一组书籍信息。 - 获取书籍名称和年份时,使用
../../name和../../year:当前上下文是author节点,../回到authors节点,再../回到book节点,即可访问name和year。 - 可选添加
<hr />分隔不同作者的条目,提升可读性。
效果
修改后,示例中的书籍会显示两次,分别对应两位作者的信息,完全符合“每本书按对应作者各显示一次”的需求。
内容的提问来源于stack exchange,提问作者eScape CS
相关产品推荐
相关产品推荐

