简体   繁体   中英

How to parse XML using XPath in Java

I want to get as a result a TagName "control". I am using XPath to parse my XML file. Currently I get only a blank window, I don't know why.

My XML file:

<tags>
  <row Id="1" TagName="soccer" Count="7" ExcerptPostId="12371" WikiPostId="12370" />
  <row Id="2" TagName="servos" Count="63" ExcerptPostId="186" WikiPostId="185" />
  <row Id="3" TagName="control" Count="394" ExcerptPostId="192" WikiPostId="191" />
  <row Id="5" TagName="gait" Count="4" ExcerptPostId="12362" WikiPostId="12361" />
</tags>

Here is my Main.java

String uri = "/home/files/Tags.xml";

try {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(uri);
    XPath xPath = XPathFactory.newInstance().newXPath();

    String output = (String) xPath.evaluate("/tags/row[@TagName='control']", doc.getDocumentElement(),
            XPathConstants.STRING);
    System.out.println("My output:" + output);
} catch (IOException | ParserConfigurationException | XPathExpressionException | SAXException e) { }

The expected output should be:

My output: control

You are getting an exception which you are silently consuming. Add e.printStackTrace() to the catch block to find out what it is.

Assuming you fix that problem, you also appear to be using an xpath to select the text content of an element that is empty (self-closed).

If you want to select the value of an attribute of an element you need to do something like:

/tags/row[@TagName='control']/@TagName

See this SO post for more information: Getting attribute using XPath

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM