Я использую 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> в которых <tempC> > 0 и <weatherDesc> = rain?
Как исключить из ответа не интересующие меня узлы <hourly>?
У меня получается получить значения атрибута используя метод getTextContent(), но такой способ мне кажется плохим, потому что если нужно будет получить значения двух атрибутов - придется писать два селектора и дважды получать результат:
private final String XPATH_PATTERN = "//hourly[tempC>0]";
InputStream response = given().when().get(URL).asInputStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(response);
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();
XPathExpression expr = xpath.compile(XPATH_PATTERN);
Object resuslt = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) resuslt;
for(int i = 4; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getTextContent()); //возвращает нужные мне значения, но этот способ плох
System.out.println(nodes.item(i).getAttributes().getNamedItem("tempC")); //возвращает null
}
Как из оставшихся узлов hourly получить нужные атрибуты?
Вы можете использовать примерно такой XPath: //hourly[tempC>0 and weatherDesc='rain']
См.: https://www.w3schools.com/xml/xpath_intro.asp
https://www.baeldung.com/java-xpath
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости