Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / January 2008

Tip: Looking for answers? Try searching our database.

get a xml node as-it-is

Thread view: 
ArunDhaJ - 17 Jan 2008 07:27 GMT
i hve a xml like this:
<Students>
 <Student name = "arun1" number="6">
 <Student name = "arun2" number="7">
 <Student name = "arun3" number="8">
 <Student name = "arun4" number="9">
...
...
...
</Students>

i need to build a new xml or a string from this with few student
nodes.... some thing like this..

<Student>
 <Student name = "arun2" number="7">
 <Student name = "arun3" number="8">
</Student>

by selecting only the two nodes.........

is there any api which should return some thing like this
"<Student name = "arun2" number="7">"

Thanks
ArunDhaJ
Arne Vajhøj - 19 Jan 2008 04:42 GMT
> i hve a xml like this:
> <Students>
[quoted text clipped - 19 lines]
> is there any api which should return some thing like this
> "<Student name = "arun2" number="7">"

It can be done in many different ways: getElementsByTagName,
XPath etc., but just for the fun of it I tried using one
of the less known features of W3C DOM - the Walker. See code
below.

Arne

==================================================

import java.io.File;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.TreeWalker;

public class Selection {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new File("C:\\stud.xml"));
        Document newdoc = db.newDocument();
        newdoc.appendChild(newdoc.createElement("Students"));
        TreeWalker walk =
((DocumentTraversal)doc).createTreeWalker(doc.getDocumentElement(),
NodeFilter.SHOW_ELEMENT, new Filter(), false);
        Node n;
        while((n = walk.nextNode()) != null) {

newdoc.getDocumentElement().appendChild(newdoc.importNode(n, true));
        }
        OutputFormat fmt = new OutputFormat();
        fmt.setIndenting(true);
        XMLSerializer ser = new XMLSerializer(new
FileOutputStream("C:\\stud2.xml"), fmt);
        ser.serialize(newdoc);
    }
}

class Filter implements NodeFilter {
    public short acceptNode(Node n) {
        if(n.getNodeName().equals("Student")) {
            int num =
Integer.parseInt(n.getAttributes().getNamedItem("number").getNodeValue());
            if(num >= 7 && num <= 8) {
               return NodeFilter.FILTER_ACCEPT;
            } else {
                return NodeFilter.FILTER_REJECT;
            }
        } else {
            return NodeFilter.FILTER_REJECT;
        }
    }
}


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.