<pizzeria>
<pizzas>
<pizza id="p001">
<nombre>Carbonara</nombre>
<precio>8.45</precio>
<disponible>si</disponible>
</pizza>
<pizza id="p002">
<nombre>Barbacoa</nombre>
<precio>9.25</precio>
<disponible>si</disponible>
</pizza>
<pizza id="p003">
<nombre>Gourmet</nombre>
<precio>7.95</precio>
<disponible>no</disponible>
</pizza>
<pizza id="p004">
<nombre>Boloñesa</nombre>
<precio>10.45</precio>
<disponible>si</disponible>
</pizza>
</pizzas>
</pizzeria>我需要让这个短语: Ofrecemos“比萨饼计数”比萨饼取消“最低价格”欧元(“最便宜比萨饼的名称”)。只有可用的比萨才会被考虑在内(它们包含可分解元素中的值“si”)。
其结果必须是"Ofrecemos 3 pizzas be 8.45欧元(羰基)“
我试过这个代码:
<table>
{let $i:=min(doc("/db/exercise/pizzeria.xml")//pizzas/pizza/precio)
for $e in doc("/db/exercise/pizzeria.xml")//pizzas
where $e/pizza/precio=$i
return
(<caption>
Ofrecemos {count($e/pizza[disponible="si"])} pizzas desde {min($e/pizza[.//disponible="si"]/precio)}€ ({$e/pizza[.//disponible="si"]/nombre/text()})
</caption>)
}
</table>遗憾的是,它不起作用。请,如果你要帮我,试着用最简单的答案。我是新来的,对此我不太了解。
发布于 2020-05-10 19:03:49
<caption>
{
let $h := /pizzeria/pizzas/pizza[disponible = "si"]
let $i := min($h/precio)
let $j := ($h[precio = $i]/nombre)[1]
let $k := count($h)
return
concat("Ofrecemos ", $k, " pizzas desde ", $i, "€ ", $j)
}
</caption>小提琴https://xqueryfiddle.liberty-development.net/bFDbxkY
做了一个修改,以选择一个名称,以防您发现多个比萨具有相同的最低值。
===========================
至于您的xquery:
let $i:=min(//pizzas/pizza/precio)指向7.95.for $e in //pizzas返回<pizzas> element(s).for $e in //pizzas where $e/pizza/precio=$i,where子句始终为true,并将返回父<pizzas>元素,其中包含修改后的<pizza> elements.发布于 2020-05-11 04:13:07
XPath 1.0解决方案:
concat('"Ofrecemos ',count(//pizza[disponible[.="si"]])," pizzas desde ",//precio[following-sibling::disponible[.="si"]][not(.>//precio[following-sibling::disponible[.="si"]])]/text(),"€(",//precio[following-sibling::disponible[.="si"]][not(.>//precio[following-sibling::disponible[.="si"]])]/preceding-sibling::*[1]/text(),')"')输出:"Ofrecemos 3 pizzas desde 8.45€(Carbonara)"
https://stackoverflow.com/questions/61716914
复制相似问题