xsl-list
[Top] [All Lists]

Re: How to sort Using Dom and SelectNodes

2003-06-05 13:49:28
Hi Karl,

With MSXML there is no method to sort nodes within the DOM. Your best bet
would be to create a simple XSLT (see below) to order the doc. The use code
something like:

var xmlUnsortedDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
var xmlSortedDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
var xmlSortXSLT = new ActiveXObject("Msxml2.DOMDocument.4.0");

... code to load the XML into xmlUnsortedDoc ...
... code to load the XSLT (see below) into xmlSortXSLT

// tranform the unsorted doc and stuff the resulting XML into a second DOM
xmlOrderedDoc.loadXML(xmlUnorderedDoc.transformNode(xmlSortXSLT));

... then get the required nodes with .selectNodes method

This XSLT should do the trick.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

 <xsl:template match="/">
  <xsl:apply-templates>
   <xsl:sort select="@order" data-type="number" order="ascending"/>
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*">
    <xsl:sort select="@order" data-type="number" order="ascending"/>
   </xsl:apply-templates>
  </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

Hope that helps

Malcolm


----- Original Message ----- 
From: "Rick Taylor" <taylor(_at_)ppdm(_dot_)org>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Thursday, June 05, 2003 1:55 PM
Subject: Re: [xsl] How to sort Using Dom and SelectNodes


I assume you are referring to coding for a browser.  I suspect that you
could code this without too much difficulty.  Maybe create an array from
the nodeset and sort it.

-rick

At 01:40 PM 6/4/03 -0700, you wrote:
[Rick]
Any way to do this without a stylesheet, just with the XML Dom (with a
method)?
I'm trying to avoid the whole "transformation" piece of this... but mabye
I
can't.
Karl

----- Original Message -----
From: "Rick Taylor" <taylor(_at_)ppdm(_dot_)org>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Wednesday, June 04, 2003 12:34 PM
Subject: Re: [xsl] How to sort Using Dom and SelectNodes


Karl,

This should give you what you want.

         <xsl:template match="xml">
           <xsl:apply-templates select="FLD[(_at_)order]">
             <xsl:sort select="@order" data-type="number"/>
           </xsl:apply-templates>
         </xsl:template>

         <xsl:template match="FLD">
            <xsl:value-of select="."/>
        </xsl:template>

-rick

At 11:40 AM 6/4/03 -0700, you wrote:
Hello,

I have a simple selectnodes method which grabs nodes from a nodes
list
who
have the attribute ORDER.  I'd actually like to select and then order
the
result based on the value of the ORDER attribute.  So:

<xml>
    <FLD order="3">run</FLD>
    <FLD order="1">See</FLD>
    <FLD>foo</FLD>
    <FLD order="2">spot</FLD>
    <FLD>bar</FLD>
</xml>

Would yield the result fragment (tree?):
    <FLD order="1">See</FLD>
    <FLD order="2">spot</FLD>
    <FLD order="3">run</FLD>

How can I achieve this?

Karl


 XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list

Rick Taylor
XML Developer
PPDM Association


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list





 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Rick Taylor
XML Developer
PPDM Association


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>