XQuery / eXist:获取特定属性的列表?

时间:2012-12-17 14:34:26

标签: xml xquery

我有以下XML文件:

<animals>
   <animal id="1" weight="56">Flipper</animal>
   <animal id="2" weight="230">Dumbo</animal>
   ...
</animals>

我只想保持重量(所以它返回“56 230 ......”)。我试过这个请求:

//animal[@weight]

但我仍然可以获得整个XML内容......我也尝试过:

//animal/@weight

由此我得到了这个错误:

  

错误SENR0001:属性'weight'没有父元素

小费是什么?

1 个答案:

答案 0 :(得分:3)

看起来您的XQuery引擎希望返回一个或多个XML文档;由于属性节点不能出现在XML文档的根目录上,因此不满意。

您可以尝试(1)编写查询以返回属性节点而不返回其值:

for $w in //animal/@weight
return string($w)

如果你的引擎真的只想要返回XML文档,那么(1)也不会让它开心。因此,您可以尝试(2)返回一系列XML元素:

for $w in //animal/@weight
return <weight>{$w}</weight>

如果这不能使满意,你可以(3)将你想要的字符串包装在XML包装器中:

<weights>
{ for $w in //animal/@weight return string($w) }
</weights>

如果你想在一个单独的行上,(4)

<weights> { 
  "&#xA;", 
  for $w in //animal/@weight 
  return (string($w), "&#xA;")
} </weights>