是否可以在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万。
有关优化和正确解决方案的建议?
答案 0 :(得分:2)
您只需要汇总当前国家/地区节点(./city
)下的城市,而不是所有国家/地区节点(//country/city
)下的城市:
countries/country[sum(./city/@num) > 1000000]/@name
输出:
Attribute='name=Israel'
Attribute='name=USA'