Сумма XPATH - PullRequest
       13

Сумма XPATH

2 голосов
/ 20 мая 2019

Есть ли способ использовать функцию суммы в XPATH, чтобы она работала на подузлах в файле XML?

Учитывая следующий файл XML.

<?xml version='1.0' encoding='UTF-8'?>
<countries>
    <country name ='Israel'>
        <city num = '300001'>'TelAviv'</city>
        <city num = '300000'>'Jerusalem'</city>
        <city num = '400000'>'Haifa'</city>
    </country>
    <country name ='USA'>
        <city num = '800000'>'Los Angeles'</city>
        <city num = '500000'>'New York'</city>
        <city num = '1000'>'Washington'</city>
    </country>
    <country name ='Italy'>
        <city num = '998999'>'Rome'</city>
        <city num = '1000'>'Vatican'</city>
    </country>
    <country name ='LalaLand'>
        <city num = '100'>'A'</city>
        <city num ='200'>'B'</city>
    </country>
</countries>

Задача состоит в том, чтобы вернуть названия всех стран, в которых сумма всех жителей (атрибут num) во всех их странах превышает 1 миллион.После нескольких попыток мне удалось написать следующий запрос:

countries/country[sum(//country/city/@num) > 1000000]/@name

Но этот запрос суммировал всех граждан (число) во всех странах вместе, а не то, что нам было предложено сделать.(Из запроса возвращается 3300300)

Мы должны получить Израиль и США, обе популяции составляют более 1 млн.

Предложения по оптимизации и правильное решение?

1 Ответ

2 голосов
/ 20 мая 2019

Необходимо суммировать только города под текущим узлом страны (./city) вместо городов под всеми узлами страны (//country/city):

countries/country[sum(./city/@num) > 1000000]/@name

Вывод:

Attribute='name=Israel'
Attribute='name=USA'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...