2010-01-29 83 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

相關問題