选择 XPath 表达式"at least 2"



我需要编写一个 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
    ')

相关内容

最新更新