Solved

XML sorting

Posted on 2004-10-05
20
354 Views
Last Modified: 2010-03-31
Hi. I have an XML file. I have loaded it as a document and am trying to sort the XML. Can anyone let me know which is the best way to sort an XML file?
0
Comment
Question by:PraKash
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 10
  • 8
20 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 12231726
For what purpose do you wish to sort it?
0
 

Author Comment

by:PraKash
ID: 12231781
I wish to sort it by an attribute value in assescending order.
0
 

Author Comment

by:PraKash
ID: 12231802
Actually I need to work on that XML file as an input for manipulating values in another database. So this does not involve any web based application. Just core java.
0
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

 
LVL 86

Expert Comment

by:CEHJ
ID: 12231888
Did this before you said about attributes, but you can use excatly the same principle:

<nodes>
      <a>b</a>
      <a>z</a>
      <a>a</a>
</nodes>      

....

NodeList list = documentNode.getElementsByTagName("a");
Collections.sort(list, new XmlSorter());


public XmlSorter implements Comparator {
      public int compare(Object o1, Object o2) {
            Node n1 = (Node)o1;
            Node n2 = (Node)o2;
            return n1.getFirstChild().getNodeValue().compareTo(return n1.getFirstChild().getNodeValue());
      }
}      
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12231895
>>return n1.getFirstChild().getNodeValue().compareTo(return n1.getFirstChild().getNodeValue());

should be


return n1.getFirstChild().getNodeValue().compareTo(n2.getFirstChild().getNodeValue());
0
 

Author Comment

by:PraKash
ID: 12231989
says documentNode is not a valid document. Well this is my last code
Document taskmod = XMLUtil.loadXML("asd.xml");
After this what should be done? Can u help?
0
 

Author Comment

by:PraKash
ID: 12232093
Can XSL be used to sort the xml file?
I tried using XSL over the XML and tried transforming but got an empty document
sample xml file
<aaa>
<aa b="z">
   <a bb=1>
</aa>
<aa b="y">
   <a bb=2>
</aa>
</aaa>
I need to sort the aa columns in assending order.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12232120
>>says documentNode is not a valid document

That's just an example. In your case, it would be 'taskMod'

>>Can XSL be used to sort the xml file?

Only at a 'presentation' level. Is that what you want? (This is why i was asking you what you wanted to do this *for*)

0
 

Author Comment

by:PraKash
ID: 12232235
First to refer to that documentNode, it says method undefined for type Document. Thats why I asked if this was another class as am currently refering to the dom4j document.

I am not using this for the presentation level. I have used XSL to simply have a markup of how the XML documents should look like in my previous occations. I am using this to format the XML so that I can use it elsewhere in the program to group certain files and write it as a different XML file itself.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12232302
>>I am not using this for the presentation level.

Then you should probably forget the xsl stuff
0
 

Author Comment

by:PraKash
ID: 12232328
OK. Then tell me how to do it Java. I tried what u had asked me to. Like I said it is giving the above error.
Can you please help me out in this.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12232365
You need to call getElementsByTagName on a valid Document reference
0
 

Author Comment

by:PraKash
ID: 12232404
Well it is refering to a dom4j Document reference. If it is the same kind of reference u r talkin abt. I am able to print it asXML and everything.
Can u please tell me which class's document will contain the method getElementsByTagName?
0
 

Author Comment

by:PraKash
ID: 12232437
I think this method is available only for w3c.dom document and not dom4j doument.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12232458
>>Well it is refering to a dom4j Document reference.

In that case try

List list = taskMod.selectNodes("a");
Collections.sort(list, new XmlSorter());
0
 

Author Comment

by:PraKash
ID: 12232510
public XmlSorter implements Comparator {

Syntax errors on tokens. What does that mean?
0
 

Author Comment

by:PraKash
ID: 12232517
and how to convert nodes back to a XML document
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 500 total points
ID: 12235775
>>Syntax errors on tokens. What does that mean?

Maybe you're calling the code i posted wrongly try:

NodeList list = documentNode.getElementsByTagName("a");
Collections.sort(list, new Comparator() {
      public int compare(Object o1, Object o2) {
            Node n1 = (Node)o1;
            Node n2 = (Node)o2;
            return n1.getFirstChild().getNodeValue().compareTo(n2.getFirstChild().getNodeValue());
      }
});

>>and how to convert nodes back to a XML document

This really depends on the structure of your original and what you want the resulting structure to be
0

Featured Post

What Is Transaction Monitoring and who needs it?

Synthetic Transaction Monitoring that you need for the day to day, which ensures your business website keeps running optimally, and that there is no downtime to impact your customer experience.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
The viewer will learn how to implement Singleton Design Pattern in Java.

717 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question