这是xml文档,为了示例,我们称之为document.xml
<garage>
<bike>
<brand>Ducati</brand>
<year>2000</year>
</bike>
<bike>
<brand>Honda</brand>
<year>2008</year>
</bike>
<bicycle>
<brand>Trek</brand>
<year>2004</year>
</bicycle>
<car>
<brand>Porsche</brand>
<year>1987</year>
</car>
<car>
<brand>Volvo</brand>
<year>2008</year>
</car>
<car>
<brand>Ford</brand>
<year>2012</year>
</car>
</garage>
我想检索这个,这是所有汽车元素
<car>
<brand>Porsche</brand>
<year>1987</year>
</car>
<car>
<brand>Volvo</brand>
<year>2008</year>
</car>
<car>
<brand>Ford</brand>
<year>2012</year>
</car>
这是我的xquery文件:
let $document:=doc('document.xml')
for $car in $document/garage[descendant::car]
return
<car>
<brand>{$car/brand/text()}</brand>
<year>{$car/year/text()}</year>
</car>
相反,使用这个xquery文件,我得到了这个:
<car>
<brand>PorscheVolvoFord</brand>
<year>198720082012</year>
</car>
还试过这个:
let $document:=doc('document.xml')
let $i:=0
for $car in $document/garage[descendant::car]
let $i:=$i+1
return
<car>
<brand>{$car[$i]/brand/text()}</brand>
<year>{$car[$i]/year/text()}</year>
</car>
但只能检索索引[1]:
<car>
<brand>Porsche</brand>
<year>1987</year>
</car>
编辑:
解决了!感谢@dirkk
对我有用的是:
for $car in $document/garage[descendants::car]
return $car/element()
答案 0 :(得分:1)
我不知道您使用的XQuery处理器,但您声称获得的输出对于给定的XQueries是不正确的。 $car
实际上绑定到一个车库元素,因此$car/brand
将是一个空结果。你必须这样做:
for $car in $document/garage/car
return
<car>
<brand>{$car/brand/string()}</brand>
<year>{$car/year/string()}</year>
</car>
如果您想要整个car
元素,您只需执行以下操作:
$document/garage/car
此外,您应该使用string()
而不是text()
,它有几个好处(例如,如果您的XML中有任何回复,则不会收到回复。