我使用 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>
我能以某种方式获得<hourly>
> 0和<tempC>
=下雨的所有节点<weatherDesc>
吗?
如何从响应中排除对我<hourly>
不感兴趣的节点?
答案 0 :(得分: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();
}
答案 1 :(得分:0)
我认为您应该从xml创建xsd并生成JAXB类。使用这些JAXB类,您可以轻松地解组xml并处理您的逻辑。