使用 XSL 和 XML 在动态 HTML table 中拆分行

Row splitting in a dynamic HTML table using XSL and XML

我正在尝试使用 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> 

目前这输出是这样的。

我想完成的事情是这样的

如您所见,作者并没有堆叠在彼此下方,也没有彼此相邻。

谁能帮我解释一下这个问题?我将不胜感激!感谢阅读。

请求的输出似乎没有多大意义(在同一列中混合书名和作者姓名,以及页数和作者年龄),但可以使用以下方法轻松实现:

<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>