首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

XPath可以对结点进行排序嘛?解决思路

2012-03-08 
XPath可以对结点进行排序嘛?我需要实现对一个结点下的所有子结点按照一个属性进行排序比如:abc 1 /

XPath可以对结点进行排序嘛?
我需要实现对一个结点下的所有子结点按照一个属性进行排序
比如:
<a>
    <b   c= "1 "   />
    <b   c= "4 "   />
    <b   c= "3 "   />
    <b   c= "2 "   />
</a>
希望得到结果为
<a>
    <b   c= "1 "   />
    <b   c= "2 "   />
    <b   c= "3 "   />
    <b   c= "4 "   />
</a>
使用XSLT输出的时候我知道可以使用 <xsl:sort   /> 进行排序输出
但是这个文件中需要排序的结点非常多(几千个吧),我只需要输出前10个而已,而且这个文档需要再很多地方用到,所以保存全部结果用xsl输出消耗很多.

我自己写了个函数进行排序,不过效率不高,不知道有没有好点解决办法.

[解决办法]
xpath无法实现排序.

以下XSL实现你要的功能,性能方面,你测试一下。
<?xml version= "1.0 "?>
<xsl:stylesheet version= "1.0 " xmlns:xsl= "http://www.w3.org/1999/XSL/Transform ">
<xsl:template match= "/ ">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match= "a ">
<xsl:apply-templates select= "b ">
<xsl:sort select= "@c "/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match= "b ">
<xsl:variable name= "count " select= "10 "/>
<xsl:if test= "position()&lt;$count ">
<xsl:value-of select= "@c "/> <br />
</xsl:if>
</xsl:template>
</xsl:stylesheet>

热点排行