Many times we need to parse an XML file and extract information from it. For example, read attribute value of an XML element with xpath. In this Java XPath tutorial, learn to get attribute value from an XML String.
I am using jdom and jaxen. These are other plenty open source APIs available also, but the idea remains the same.
Java program to get value from in Java using XPath
Below given Java program create a DOM object from supplied XML string. It then applies the XPATH expression using XPath.selectNodes() method.
Method returns list of Element
instances which are result of evaluating XPath expression. You can iterate the list and use the results.
package com.howtodoinjava.xml; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class XmlAttributesUsingXPathExample { @SuppressWarnings("unchecked") public static void main(String[] args) throws JDOMException, IOException { Document doc = new SAXBuilder(false).build(new StringReader(new String( <users> " + <user id='13423'>" + <firstname>Andre</firstname>" + </user>" + <user id='32424'>" + <firstname>Peter</firstname>" + </user> " + <user id='543534'>" + <firstname>Sandra</firstname>" + </user>" + </users>"))); //Build the xpath expression XPath xpathExpression = XPath.newInstance("//*[@id]"); //Apply xpath and fetch all matching nodes ArrayList<Element> userIds = (ArrayList<Element>) xpathExpression.selectNodes(doc); //Iterate over naodes and print the value for (int i = 0; i < userIds.size(); i++) { System.out.println((userIds.get(i)).getAttributeValue("id").trim()); } } }
Program output.
13423 32424 543534
java.lang.ClassCastException: org.jdom.Document cannot be cast to org.w3c.dom.Node at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:116) at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:98) at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:180)
Happy Learning !!
I need to check child tag contain text() using xPath. I have one parent tag it have more child and Sub child. I need to check any of my child tag contain text(). If it may ,, or any customize tag too. and I nee to print it nodeName.
I am getting following exception at
XPath xpathExpression = XPath.newInstance(“//*[@id]”);
Exception in thread “main” java.lang.NoClassDefFoundError: org/jaxen/JaxenException at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at org.jdom.xpath.XPath.newInstance(XPath.java:134) at xmlattributes.Main.main(Main.java:61)
pl guide me me added jdom1.2.2 jar
Rajendra
Rajendra, please make sure to add both jars i.r. jdom and jaxen in your class path.
Download from below locations:
https://mvnrepository.com/artifact/org.jdom
http://www.java2s.com/Code/Jar/j/Downloadjaxen111jar.htm