如何使用Java获取XML的价值?

时间:2011-11-14 12:25:26

标签: java xml dom xpath xml-parsing

我已经尝试了很多次,但我不知道如何使用Java从XML中检索值。我试图使用DOM和Xpath。请帮忙。我可以使用String Writer来打印XML,因此我知道XML不是空的。

Document doc = parseXML(connection.getInputStream());

doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("/xml_api_reply/weather/current_conditions/temp_f/text()");


Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getNodeValue()); 
}

XML的内容:

<xml_api_reply version="1">
  <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
    <current_conditions>
        <condition data="Clear"/>
        <temp_f data="49"/>
        <temp_c data="9"/>
    </current_conditions>
  </weather>
</xml_api_reply>

似乎它没有进入for循环,因为nodes为空。

2 个答案:

答案 0 :(得分:4)

您的XPath表达式求值为temp_f下面的(不存在的)文本节点。但是,您需要data属性的值:

/xml_api_reply/weather/current_conditions/temp_f/@data

可能会做到这一点。

答案 1 :(得分:0)