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

发布于 2024-12-15 12:58:04 字数 1090 浏览 0 评论 0原文

我已经尝试了很多次,但我不知道如何使用 Java 从 XML 中检索值。我尝试使用 DOM 和 Xpath。请帮忙。我可以使用字符串编写器打印 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 为 null。

I have tried a lot of times but I did not how to retrive a value from XML using Java. I tried to use DOM and Xpath. Please help. I can use a String Writer to printout the XML so I know the XML is not empty.

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()); 
}

The content of 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>

It seems that it did not go in to the for loop because nodes is null.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青衫负雪 2024-12-22 12:58:04

您的 XPath 表达式的计算结果为 temp_f 下的(不存在的)文本节点。然而,您需要 data 属性的值:

/xml_api_reply/weather/current_conditions/temp_f/@data

也许可以解决问题。

Your XPath expression evaluates to the (non existant) text-nodes underneath temp_f. Yet, you need the value of the data attribute:

/xml_api_reply/weather/current_conditions/temp_f/@data

may do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文