Xquery:找到制造商,使他们生产的每台PC的价格都不超过100

时间:2017-07-28 00:02:30

标签: xml xpath xquery

我目前正在努力寻找条件"找到制造商,使他们生产的每台PC的价格不超过100"和"找到生产至少两台PC的制造商的名称,速度为3或更高"。我使用下面粘贴的数据。

我有点失落,并且会喜欢如何实现这一目标的例子。

使用数据:

  <?xml version="1.0" encoding="UTF-8"?>
<Products>
  <Maker name="A">
    <PC model="1001" price="2114"> 
      <Speed>2.66</Speed>  
      <RAM>1024</RAM>
      <HardDisk>250</HardDisk>
    </PC>
    <PC model="1002" price="995">
      <Speed>2.10</Speed>
      <RAM>512</RAM>
      <HardDisk>250</HardDisk>
    </PC>
    <Laptop model="2004" price="1150">
      <Speed>2.00</Speed>
      <RAM>512</RAM>
      <HardDisk>60</HardDisk>  
      <Screen>13.3</Screen>
    </Laptop>
    <Laptop model="2005" price="2500">
      <Speed>2.16</Speed>
      <RAM>1024</RAM>
      <HardDisk>120</HardDisk>
      <Screen>17.0</Screen>
    </Laptop> 
  </Maker>
  <Maker name="E">
    <PC model="1011" price="959">
      <Speed>l.86</Speed>  
      <RAM>2048</RAM>  
      <HardDisk>160</HardDisk>
    </PC>
    <PC model="1012" price="649">
      <Speed>2.80</Speed>
      <RAM>1024</RAM>
      <HardDisk>160</HardDisk>
    </PC>
    <Laptop model="2001" price="3673">
      <Speed>2.00</Speed>
      <RAM>2048</RAM>
      <HardDisk>240</HardDisk>
      <Screen>20.1</Screen>
    </Laptop>
    <Printer model="3002" price="239">
      <Color>false</Color>
      <Type>laser</Type>
    </Printer>
  </Maker>
  <Maker name="H">
    <Printer model="3006" price="100">
      <Color>true</Color>
      <Type>ink-jet</Type> 
    </Printer>
    <Printer model="3007" price="200">
      <Color>true</Color>
      <Type>laser</Type>
    </Printer>
  </Maker>
</Products>

1 个答案:

答案 0 :(得分:1)

  

找到制造商,使他们生产的每台PC的价格都不超过[1000]

我将100改为1000,因为没有Maker在您的样本数据中制作价格低于100的PC。

阅读此问题的另一种方法是:

找到创建者的/Products/Maker),制作个人电脑[PC]),没有PC的价格大于1000 [not(PC/@price > 1000)])。

全部放在一起......

/Products/Maker[PC and not(PC/@price > 1000)]

等效的FLWR声明......

for $maker in /Products/Maker
where $maker/PC and not($maker/PC/@price > 1000)
return
    $maker

结果(XPath和FLWR)......

<Maker name="E">
    <PC model="1011" price="959">
        <Speed>l.86</Speed>  
        <RAM>2048</RAM>  
        <HardDisk>160</HardDisk>
    </PC>
    <PC model="1012" price="649">
        <Speed>2.80</Speed>
        <RAM>1024</RAM>
        <HardDisk>160</HardDisk>
    </PC>
    <Laptop model="2001" price="3673">
        <Speed>2.00</Speed>
        <RAM>2048</RAM>
        <HardDisk>240</HardDisk>
        <Screen>20.1</Screen>
    </Laptop>
    <Printer model="3002" price="239">
        <Color>false</Color>
        <Type>laser</Type>
    </Printer>
</Maker>
  

查找至少生成两台PC速度的制造商名称    [2]或更多

我将3更改为2,因为没有制作者在您的样本数据中生成两个或更多个速度为3或更多的PC。

阅读此问题的另一种方法是:

查找至少生成两个PC /Products/Maker/@name的制造商名称[count(PC) >= 2]速度为2或更高[Speed >= 2])。

全部放在一起......

/Products/Maker[count(PC[Speed >= 2]) >= 2]/data(@name)

等效的FLWR声明......

for $maker in /Products/Maker
where count($maker/PC[Speed >= 2]) >= 2
return
    data($maker/@name)

结果(XPath和FLWR)......

A