This is straight forward and I think better than iterating through the
document tree. There is a evaluate method available in XPATH interface.
Here is a sample code for it:
Sample Input:
Sample Output:
Here I am just printing the node values but you can easily create a new XML document and append this nodelist to it.
PS: if you change the expression to //node/data/text() then to access the value you just need to do outPut.item(i).getNodeValue()
Here is a sample code for it:
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
public class ApplyXPATH {
public static void main(String[] args) {
XPath xpath = XPathFactory.newInstance().newXPath();
InputSource inputSource = new InputSource("XMLs/MultiNode.xml");
String expression = "//node/data";
NodeList outPut=null;
try {
outPut = (NodeList) xpath.evaluate(expression, inputSource, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
for(int i=0; i<outPut.getLength();i++) {
System.out.println(outPut.item(i).getFirstChild().getNodeValue());
}
}
}
Sample Input:
<root>
<node>
<data>123</data>
<data>456</data>
<junk>abc</junk>
</node>
<junknode>
<junk>def</junk>
</junknode>
<node>
<data>789</data>
<junk>ghi</junk>
<data>012</data>
</node>
</root>
Sample Output:
123
456
789
012
Here I am just printing the node values but you can easily create a new XML document and append this nodelist to it.
PS: if you change the expression to //node/data/text() then to access the value you just need to do outPut.item(i).getNodeValue()
No comments:
Post a Comment