Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

getting Node and NodeList object from xpath.evaluate method

800459Aug 25 2009 — edited Aug 26 2009
Hi,

I am newbie for JAXP, using XML stuff from long time, but never bothered to look behind the common utilities, this time , i thought of writing my own code to handle xml related stuff, I started with XPath and got stucked in a problem and ended up writing it here.

I have this sample program, which uses JAXP to read an xml document. it works well when I am reading value of a node, but it is not returning me the nodelist or node object.

Looking for JAXP experts to help me.

Here is the code
package com.xml.xpath.test;

import java.io.File;
import java.util.Iterator;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XPathTest {
	
	public static void main(String[] args) throws Exception {
		
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		
		File xmlFile = new File("Sample.xml");

		// Create a DocumentBuilder
		DocumentBuilder builder = factory.newDocumentBuilder();
		
//		 Parse an XML document
		Document document = builder.parse(xmlFile);
		
		XPath xPath = XPathFactory.newInstance().newXPath();
		
		// this works gets the value of the node
		System.out.println("value is " + xPath.evaluate("/catalog/journal/article[2]/title",document));
		
		//this doesn't work doesn't give me the node
		System.out.println("value is " + xPath.evaluate("/catalog/journal/article[2]/title",document,XPathConstants.NODE));
		
		
		//Even getting list doesn't seems working
		NodeList list = (NodeList)xPath.evaluate("/catalog/journal/article",document,XPathConstants.NODESET);
		for(int i=0;i<list.getLength();i++ ) {
			
			System.out.println(list.item(i).getChildNodes().item(0).getNodeValue());
			
		}
		
		
		}

}
Output of the program
value is Data Binding with XMLBeans1
value is [title: null]


Here the sample.xml used in this program
<?xml version="1.0" encoding="UTF-8"?>
<catalog title="OnJava.com" publisher="O'Reilly">
<journal date="January 2004">
<article>
<title>Data Binding with XMLBeans</title>
<author>Daniel Steinberg</author>
</article>
<article>
<title>Data Binding with XMLBeans1</title>
<author>Daniel Steinberg1</author>
</article>
<article>
<title>Data Binding with XMLBeans2</title>
<author>Daniel Steinberg2</author>
</article>
<article>
<title>Data Binding with XMLBeans3</title>
<author>Daniel Steinberg3</author>
</article>
<article>
<title>Data Binding with XMLBeans3</title>
<author>Daniel Steinberg3</author>
</article>
</journal>
</catalog>
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 23 2009
Added on Aug 25 2009
2 comments
1,333 views