我有一个XML文件,其内容我想按文档顺序排序(基本上按照写出项目的顺序)。
我目前使用以下代码:
<xsl:template match="/Error">
<xsl:apply-templates>
<xsl:sort select="position()" order="descending" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="/Error/Warning">
<!-- etc -->
</xsl:template>
示例XML(为便于阅读而替换数据):
<Error>
<Warning data="stuff" timestamp="08:26:17 2010/08/01">CODE.1</Warning>
<Clear data="stuff" timestamp="08:26:36 2010/08/01">CODE.2</Clear>
<Warning data="stuff" timestamp="08:36:00 2010/08/01">CODE.3</Warning>
<Clear data="stuff" timestamp="08:36:56 2010/08/01">CODE.4</Clear>
<Warning data="stuff" timestamp="08:40:31 2010/08/01">CODE.5</Warning>
</Error>
然而,这似乎给出了奇怪的结果,因为它似乎没有特别的顺序!有什么想法吗?
删除排序似乎使其正常工作 - 这是否可以按写入顺序对其进行可靠排序,还是无法保证?
答案 0 :(得分:1)
你不知道要将模板应用到哪个节点?
例如:
<xsl:apply-templates select="/Error/messages" />
在处理xslt问题时使用你正在处理的xml会很不错。
答案 1 :(得分:1)
<xsl:apply-templates />
按文档顺序对选定的节点集进行操作,删除sort元素,这将根据需要运行。请参阅:Applying Template Rules
答案 2 :(得分:1)
不应该这样吗?在apply-templates上使用select属性?
<xsl:template match="/Error">
<xsl:apply-templates select="./Warning" />
</xsl:template>
<xsl:template match="/Error/Warning">
<!-- etc -->
</xsl:template>
您应该按照XML源中的顺序获取输出。