创建后在xsl中对表进行排序

时间:2017-04-26 10:10:25

标签: xml xslt

我正在尝试从XML中的两个节点集创建一个HTML表,然后按@AD对其进行排序。

我可以使用<xsl:sort select="@AD" order="ascending" />在每个循环中对每个循环进行排序,但我想对整个表进行排序。

<xsl:template match="*/Sync/AP">
    <table border="1">
        <tr>
            <th>AD</th>
            <th>GCD</th>
            <th>ClearAttribute</th>
        </tr>
        <xsl:for-each select="./*">
        <tr>
            <td><xsl:value-of select="@AD"/></td>
            <td><xsl:value-of select="@GCD"/></td>
            <td><xsl:value-of select="@ClearAttribute"/></td>
        </tr>       
        </xsl:for-each>
        <!-- Also Append the Common attributes to each region -->
        <xsl:for-each select="../Common/*">
        <tr>
            <td><xsl:value-of select="@AD"/></td>
            <td><xsl:value-of select="@GCD"/></td>
            <td><xsl:value-of select="@ClearAttribute"/></td>
        </tr>       
        </xsl:for-each>
    </table>
</xsl:template>

1 个答案:

答案 0 :(得分:1)

不要分开两个<xsl:template match="Sync/AP"> <table border="1"> <tr> <th>AD</th> <th>GCD</th> <th>ClearAttribute</th> </tr> <xsl:for-each select="./* | ../Common/*"> <xsl:sort select="@AD" order="ascending" /> <tr> <td><xsl:value-of select="@AD"/></td> <td><xsl:value-of select="@GCD"/></td> <td><xsl:value-of select="@ClearAttribute"/></td> </tr> </xsl:for-each> </table> </xsl:template> 。选择要显示的所有节点,然后一步排序。

联合运算符match用于此:

<xsl:template match="*/Sync/AP">

注意:即使<xsl:template match="Sync/AP"> 表达式看起来像XPath,它们也不是真正的XPath。这是不必要的:

<xsl:template match="AP">

你可以改用它:

<AP>

甚至是这样:

<Sync>

除非您明确要确保只有{{1}}父级{{1}}匹配。