我目前正在努力寻找条件"找到制造商,使他们生产的每台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>
答案 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