鉴于此xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<mydoc>
<foo f="fooattr">
<bar r="barattr1">
<baz z="bazattr1">this is the first baz</baz>
</bar>
<bar r="barattr2">
<baz z="bazattr2">this is the second baz</baz>
</bar>
</foo>
</mydoc>
正由此xquery处理:
let $d := doc('file:///Users/mark/foo.xml')
let $barnode := $d/mydoc/foo/bar/baz[contains(@z, '2')]
let $foonode := $barnode/../../@f
return $foonode
我收到以下错误:
"Cannot create an attribute node (f) whose parent is a document node".
似乎../操作是从文档的其余部分中删除匹配节点,使其认为它是文档节点。
我对其他方法持开放态度,但父选择取决于包含某个子字符串的子属性。
干杯!
答案 0 :(得分:30)
您编写的查询是选择属性f。但是,从XQuery返回属性节点是不合法的。错误是指输出文档,这里只包含一个属性(尽管此错误消息具有误导性,因为从技术上讲,此处没有输出文档,只返回一个属性节点。)
您可能想要返回属性的值而不是属性本身
return data($foonode)