我试图将使用XSL的循环拆分到第二行,但我不确定如何处理此问题。让我告诉你我的代码来解释。
XML
<main>
<book>
<name>Harry Potter 1</name>
<pages>347</pages>
<authors>
<name>J.K Rowling</name>
<age>49</age>
</authors>
<authors>
<name>Dan Brown</name>
<age>59</age>
</authors>
</book>
<book>
<name>Harry Potter 2</name>
<pages>800</pages>
<authors>
<name>J.K Rowling</name>
<age>49</age>
</authors>
<authors>
<name>Barack Obama</name>
<age>40</age>
</authors>
</book>
XSL
<table class="table table-bordered" border="1">
<xsl:for-each select="main/book">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="pages" /></td>
</tr>
<tr>
<xsl:for-each select="./authors">
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="age" /></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
目前这会产生类似的结果。
我想要完成的是这样的事情
正如你所看到的那样,作者并没有彼此堆叠而是彼此相邻。
任何人都可以为我阐明这一点吗?我将不胜感激!谢谢你的阅读。
答案 0 :(得分:1)
请求的输出似乎没有多大意义(在同一列中混合书籍和作者名称,以及页面数和作者年龄),但可以使用以下方法轻松实现:
<xsl:template match="/">
<table class="table table-bordered" border="1">
<xsl:for-each select="main/book">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="pages" /></td>
</tr>
<xsl:for-each select="authors">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="age" /></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>