我需要对XML文档进行排序,如下所示:
<root xmlns="http://my.name.space.com">
<product id="id001">
<datafield name="Name" value="value 1"/>
<datafield name="Description" value="descriptive text"/>
<dataAttribute id="id002">
<datafield name="Name" value="ZZZZZ"/>
<datafield name="Start Date" value="16/01/2010 00:00:00"/>
<datafield name="End Date" value=""/>
<datafield name="Status" value="Active"/>
</dataAttribute>
<dataAttribute id="id003">
<datafield name="Name" value="XXXXX"/>
<datafield name="Start Date" value="16/01/2010 00:00:00"/>
<datafield name="End Date" value=""/>
<datafield name="Status" value="Active"/>
</dataAttribute>
<dataAttribute id="id004">
<datafield name="Name" value="YYYYY"/>
<datafield name="Start Date" value="16/01/2010 00:00:00"/>
<datafield name="End Date" value=""/>
<datafield name="Status" value="Active"/>
</dataAttribute>
</product>
</root>
dataAttribute元素应按@name Attribute =“Name”排序,但排序应该由此元素的@value属性出现。
你对此有任何暗示吗?
非常感谢!
弗里茨
答案 0 :(得分:0)
将xsl:sort
与正确的select
属性一起使用:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:df="http://my.name.space.com"
exclude-result-prefixes="df">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="df:product">
<xsl:copy>
<xsl:apply-templates select="@* | *[not(self::df:dataAttribute)]"/>
<xsl:apply-templates select="df:dataAttribute">
<xsl:sort select="df:dataField[@name = 'Name']/@value"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>