Monday, 7 July 2014

Retrieve xml node value with xpath



Here is my xml file: bookstore.xml and what I am trying to do is I provide xpath as input and it should give me that node value of it. but it gives me null values.



<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>


here is the java code :



public class XmlParserUsingXpath {


public void xmlParser(XPathExpression xpathexp) throws ParserConfigurationException, XPathExpressionException{


DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder dbuilder = factory.newDocumentBuilder();

Document doc=null;

try {
doc= dbuilder.parse(new FileInputStream("D:\\Bookstore.xml"));

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();
}

doc.getDocumentElement().normalize();

Object result = xpathexp.evaluate( doc, XPathConstants.NODESET );

NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i));
}

public static void main(String[] args){

XmlParserUsingXpath o1= new XmlParserUsingXpath();

XPath x=XPathFactory.newInstance().newXPath();

System.out.println("Enter the Xpath Expression : ");

Scanner sc= new Scanner(System.in);

String scan= sc.nextLine();

try {

o1.xmlParser(x.compile(scan));

} catch (XPathExpressionException | ParserConfigurationException e) {

e.printStackTrace();
}

}



}


now when i provide "//book" as input, it gives me



[book: null]
[book: null]
[book: null]
[book: null]


or "/bookstore/book[3]/author" would give



[author: null]
[author: null]
[author: null]
[author: null]
[author: null]

No comments:

Post a Comment