使用xslt 1.0排序

时间:2012-12-19 01:43:14

标签: xslt xslt-1.0

我正在尝试使用XSLT 1.0版对xml文档进行排序。

我的XML看起来如下:

<?xml version="1.0" encoding="UTF-8"?>
<testMain>
<test name="test1" enabled="false">
<field name="abc" enabled="false" description="test1">
</field>
<field name="dac" enabled="false" description="test2">
</field>
<field name="aaa" enabled="false" description="test4">
</field>
<field name="cat" enabled="false" description="test3">
</field>
</test>
</testMain>

结果应采用以下格式,按名称排序:

<?xml version="1.0" encoding="UTF-8"?>
<testMain>
<test name="test1" enabled="false">
<field name="aaa" enabled="false" description="test4">
</field>
<field name="abc" enabled="false" description="test1">
</field>
<field name="cat" enabled="false" description="test3">
</field>
<field name="dac" enabled="false" description="test2">
</field>
</test>
</testMain>

我在xslt中的代码如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
  </xsl:template>

  <xsl:template match="test">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="field">
        <xsl:sort select="name" data-type="text"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

我不确定为什么没有生成所需的输出。任何帮助非常感谢。

谢谢

1 个答案:

答案 0 :(得分:0)

由于name是一个属性,您需要使用@

来访问它
<xsl:sort select="@name" data-type="text"/>