获取一个节点从XML文档

问题描述 投票:0回答:2

我用的是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>
  1. 我能以某种方式获得,其中<hourly>> 0和<tempC> =雨的所有节点<weatherDesc>
  2. 如何从没有让我感兴趣的节点<hourly>响应排除?
java xml api xml-parsing
2个回答
1
投票

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

0
投票

我想你应该从XML创建XSD和生成JAXB classes.Using那些JAXB类,你可以很容易地解组XML并处理您的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.