我需要编写一个 XPath 表达式来根据以下数据找到至少有 2 个供应商的城市(该表达式应该返回芝加哥和麦迪逊,因为它们每个都有 2 个供应商):
<SuppliersList>
<Supplier name="Joe">
<City>Paris</City>
<Product name="Airplane"/>
<Product name="Milk"/>
<Product name="TV"/>
<Product name="Orange"/>
</Supplier>
<Supplier name="Herman">
<City>Chicago</City>
<Product name="Orange"/>
</Supplier>
<Supplier name="Bernstein">
<City>Madison</City>
<Product name="Truck"/>
<Product name="TV"/>
</Supplier>
<Supplier name="Hunter">
<City>Wausau</City>
</Supplier>
<Supplier name="Mayer">
<City>Madison</City>
</Supplier>
<Supplier name="Rosenfeld">
<City>Chicago</City>
<Product name="Computer"/>
<Product name="Book"/>
<Product name="Truck"/>
</Supplier>
</SuppliersList>
任何帮助将不胜感激
最佳答案
//Supplier[City = following::Supplier/City]/City
解释:
- 获取所有
Supplier
元素- 其中
City
元素等于当前节点 下方 的任何Supplier/City
元素
- 其中
- 并取
City
元素
当然,这在 XSLT 模板中要容易得多
编辑
现在我看到您使用的是 XQuery,而不是 XPath:
DECLARE @x xml
SET @x = '
<SuppliersList>
<Supplier name="Joe">
<City>Paris</City>
<Product name="Airplane"/>
<Product name="Milk"/>
<Product name="TV"/>
<Product name="Orange"/>
</Supplier>
<Supplier name="Herman">
<City>Chicago</City>
<Product name="Orange"/>
</Supplier>
<Supplier name="Bernstein">
<City>Madison</City>
<Product name="Truck"/>
<Product name="TV"/>
</Supplier>
<Supplier name="Hunter">
<City>Wausau</City>
</Supplier>
<Supplier name="Mayer">
<City>Madison</City>
</Supplier>
<Supplier name="Rosenfeld">
<City>Chicago</City>
<Product name="Computer"/>
<Product name="Book"/>
<Product name="Truck"/>
</Supplier>
</SuppliersList>'
SELECT @x.query('
let $cities := //City
for $city in distinct-values($cities)
where count($cities[. eq $city]) >= 2
return $city
')
关于sql - 选择 "at least 2"XPath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852904/