为了账号安全,请及时绑定邮箱和手机立即绑定

从 XML 文档中获取节点

从 XML 文档中获取节点

largeQ 2022-06-04 16:12:52
我使用worldweatheronline API。该服务以下列形式提供 xml:<hourly>  <tempC>-3</tempC>  <weatherDesc>rain</weatherDesc>  <precipMM>0.0</precipMM></hourly><hourly>  <tempC>5</tempC>  <weatherDesc>no</weatherDesc>  <precipMM>0.1</precipMM></hourly>我能以某种方式获得 > 0 和 = 下雨的所有<hourly>节点<tempC>吗<weatherDesc>?如何从响应中排除我不感兴趣的节点<hourly>?
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

使用XPath是非常可行的。

您可以根据元素值、属性值和其他条件过滤文档。这是一个根据问题的第一点获取元素的工作示例:


    try (InputStream is = Files.newInputStream(Paths.get("C:/temp/test.xml"))) {

        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

        Document xmlDocument = builder.parse(is);

        XPath xPath = XPathFactory.newInstance().newXPath();

        // get hourly elements that have tempC child element with value > 0 and weatherDesc child element with value = "rain"

        String expression = "//hourly[tempC>0 and weatherDesc=\"rain\"]";

        NodeList hours = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);

        for (int i = 0; i < hours.getLength(); i++) {

            System.out.println(hours.item(i) + " " + hours.item(i).getTextContent());

        }


    } catch (Exception e) {

        e.printStackTrace();

    }


查看完整回答
反对 回复 2022-06-04
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我认为您应该从 xml 创建 xsd 并生成 JAXB 类。使用这些 JAXB 类,您可以轻松地解组 xml 并处理您的逻辑。



查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信