按某些属性对XML元素进行排序 [英] Sort XML elements by certain attributes

查看:81
本文介绍了按某些属性对XML元素进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要对如下所示的XML文档进行排序:

I would need to sort an XML document that looks like follows:

<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属性进行.

The dataAttribute elements should be sorted, by the one which @name Attribute = "Name" but the sorting should occure by this element's @value attribute.

您对此有任何提示吗?

非常感谢!

弗里兹

推荐答案

xsl:sort与适当的select属性配合使用:

Well use xsl:sort with the proper select attribute:

<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>

这篇关于按某些属性对XML元素进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆