使用XQuery / XPath获取元素父节点的属性值

时间:2010-01-29 23:33:15

标签: xpath xquery

鉴于此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". 

似乎../操作是从文档的其余部分中删除匹配节点,使其认为它是文档节点。

我对其他方法持开放态度,但父选择取决于包含某个子字符串的子属性。

干杯!

1 个答案:

答案 0 :(得分:30)

您编写的查询是选择属性f。但是,从XQuery返回属性节点是不合法的。错误是指输出文档,这里只包含一个属性(尽管此错误消息具有误导性,因为从技术上讲,此处没有输出文档,只返回一个属性节点。)

您可能想要返回属性的值而不是属性本身

return data($foonode)