Solved

Extract Tags from XML using org.w3c.dom

Posted on 2008-10-14
2
853 Views
Last Modified: 2012-05-05
I have an xml that looks something like the below. I am using Java. I have parsed it. (There can be an infinite number of <Result> tags as well as an infinite number of <Return> tags.)

<TestXML>
    <FirstStuff>blah</FirstStuff>
    <MoreStuff>blah blah</MoreStuff>
    <Result>1234</Result>
    <Result>5678</Result>
    <Return>
         <Comment>This one worked</Comment>
         <Pool>1234</Pool>
    </Return>
    <Return>
         <Comment>This one worked better</Comment>
         <Pool>5678</Pool>
    </Return>
</TestXML>

This is a piece of code that I have used:
     final Document document = xmlObject.getXmlAsDocument();
     final NodeList nodeList = document.getElementsByTagName("Result");
     final Vector results = new Vector();
     for (int i = 0; i < nodeList.getLength(); i++) {
          final Node node = nodeList.item(i);
          final String nodeName = node.getNodeName();
          final Node nodeValue =  node.getChildNodes().item(0);
          results.add(nodeValue.getNodeValue());
     }

This works fine. But now I don't need to get the results tag anymore, but the two tags inside the Return tag. And I need to associate the comment with the pool, so I need to get them together so I can put them in some object before adding them to the Vector. I am very unfamiliar with how this work and am struggling to read the tags inside the Results tag. I tried the getChildren and getSibling thing...but I don't think I am using it in the right way. Can someone help me ??      
0
Comment
Question by:Zenoe
2 Comments
 
LVL 6

Expert Comment

by:manuel_m
ID: 22712121
If you want to read the tags inside of the return tag, you have to add another for loop.

First, get elements by tag name from "Return" tag.
Now you have a node list with all Return nodes.
To get the tags inside you have to get the child nodes (getChildNodes()) from the items in your for loop.
With getChildNodes you get another node list.
Iterate over it to get the Comment and Pool tags. To get the text try getTextContent on the nodes.
0
 
LVL 5

Accepted Solution

by:
muktajindal earned 80 total points
ID: 22718361
You may use the attached code snippet.
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(new File("C:\\test.xml"));
			NodeList nodeList = document.getElementsByTagName("Return");
			for (int i = 0; i < nodeList.getLength(); i++) {
				Node node1 = nodeList.item(i);
				if (node1.getNodeType() == Node.ELEMENT_NODE) {
					NodeList nodes = node1.getChildNodes();
					for (int j= 0; j < nodes.getLength(); j++) {
						Node node2 = nodes.item(j);
						if (node2.getNodeType() == Node.ELEMENT_NODE) {
							NodeList internalNodes = node2.getChildNodes();
							String nodeName = node2.getNodeName();
							for (int k = 0; k < internalNodes.getLength(); k++) {
								Node node = internalNodes.item(k);
								String nodeValue = node.getNodeValue();
								System.out.println(nodeName + " = " + nodeValue);
							}
						}
					}
				}
			}
		} catch(Exception e) {
			e.printStackTrace();
		}

Open in new window

0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

Suggested Solutions

Browsing the questions asked to the Experts of this forum, you will be amazed to see how many times people are headaching about monster regular expressions (regex) to select that specific part of some HTML or XML file they want to extract. The examp…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

770 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