2010-01-29 87 views
19

的属性值:使用XQuery/XPath来获取鉴于此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". 

看来,../操作有点像从文档的其余部分删除匹配节点,使得它认为它是文档节点。

我打开其他方法,但父母的选择取决于包含某个子字符串的子属性。

干杯!

回答

30

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

你可能想返回属性的值,而不是本身

return data($foonode) 
+0

事实上,我做的属性!非常感谢。 – 2010-02-01 18:27:51

相关问题