Solved

Extract Tags from XML using org.w3c.dom

Posted on 2008-10-14
2
852 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

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
groupSum6 challenge 6 77
ArrayIndexOutOfBoundException 9 67
XSLT XML 4 14
reverse digits of a number using for loop 5 36
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
The Confluence of Individual Knowledge and the Collective Intelligence At this writing (summer 2013) the term API (http://dictionary.reference.com/browse/API?s=t) has made its way into the popular lexicon of the English language.  A few years ago, …
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
The viewer will learn how to implement Singleton Design Pattern in Java.

910 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

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now