我正在尝试从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>
答案 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}}匹配。