Я использую 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть приложение, состоящее из нескольких maven-modulesВ каждом модуле есть Класс, который просто заполняет, хранит и в методах возвращает два List<>
Читаю книгу про компиляторы(книга дракона), разбираюсь как лексические и синтаксические анализаторы программируютсяВ конце книги есть пример...
Хочу импленментировать синхронизацию баз данных между удаленными машинамиВсе происходит так: embedded система собирает данные и при возможности...