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

Mar*_*art 20 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>
Run Code Online (Sandbox Code Playgroud)

正在由此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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"Cannot create an attribute node (f) whose parent is a document node". 
Run Code Online (Sandbox Code Playgroud)

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

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

干杯!

Oli*_*lam 31

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

您可能希望返回属性的值而不是属性本身

return data($foonode)
Run Code Online (Sandbox Code Playgroud)