XPATH sum函数

时间:2019-05-20 09:55:37

标签: xml xpath

是否可以在XPATH中使用sum函数,因此它将在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属性)大于一百万。 经过几次尝试,我能够编写以下查询:

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

但是查询汇总了所有国家/地区的所有公民(人数),而不是我们被要求做的事情。 (查询返回的是3300300)

我们应该得到以色列和美国,这两个国家的人口都超过100万。

有关优化和正确解决方案的建议?

1 个答案:

答案 0 :(得分:2)

您只需要汇总当前国家/地区节点(./city)下的城市,而不是所有国家/地区节点(//country/city)下的城市:

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

输出:

Attribute='name=Israel'
Attribute='name=USA'