Сортировка по XML - PullRequest
       10

Сортировка по XML

1 голос
/ 30 января 2009

У меня есть следующий XML

<fields>
  <field position="4" tablename="Students" headername="First Name" fieldreference="FirstName" orderbydirection="ASC" />
  <field position="2" tablename="Students" headername="Last Name" fieldreference="LastName" orderbydirection="ASC" />
  <field position="3" tablename="Students" headername="Race" fieldreference="Race" orderbydirection="ASC" />
  <field position="1" tablename="Students" headername="Sex" fieldreference="Sex" orderbydirection="ASC" />
  <field position="5" tablename="Students" headername="State" fieldreference="State" orderbydirection="ASC" />
</fields>

Я хочу отсортировать его по "позиции"

Как это можно сделать?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 31 января 2009

Это преобразование XSLT 1.0 :

<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="fields">
      <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates>
          <xsl:sort select="@position" data-type="number"/>
        </xsl:apply-templates>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<fields>
    <field position="4" tablename="Students" headername="First Name" fieldreference="FirstName" orderbydirection="ASC" />
    <field position="2" tablename="Students" headername="Last Name" fieldreference="LastName" orderbydirection="ASC" />
    <field position="3" tablename="Students" headername="Race" fieldreference="Race" orderbydirection="ASC" />
    <field position="1" tablename="Students" headername="Sex" fieldreference="Sex" orderbydirection="ASC" />
    <field position="5" tablename="Students" headername="State" fieldreference="State" orderbydirection="ASC" />
</fields>

дает желаемый результат :

<fields>
  <field position="1" tablename="Students" headername="Sex" fieldreference="Sex" orderbydirection="ASC" />
  <field position="2" tablename="Students" headername="Last Name" fieldreference="LastName" orderbydirection="ASC" />
  <field position="3" tablename="Students" headername="Race" fieldreference="Race" orderbydirection="ASC" />
  <field position="4" tablename="Students" headername="First Name" fieldreference="FirstName" orderbydirection="ASC" />
  <field position="5" tablename="Students" headername="State" fieldreference="State" orderbydirection="ASC" />
</fields>
1 голос
/ 30 января 2009

См сортировку с XSLT http://www.xml.com/pub/a/2002/07/03/transform.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...