2014-05-13 45 views
0

我有下面的xml,我無法使用xmlquery獲取LocationOfNode。任何建議如何進行?請看下面的例子,看看我想達到什麼。Oracle XmlQuery檢索節點的路徑

<data> 
    <type id="01" desc="Doctors"> 
     <type id="02" desc="Private Hospital"> 
      <type id="03" desc="John"></type> 
      <type id="04" desc="James"></type> 
     </type> 
     <type id="05" desc="Public Hospital"> 
      <type id="06" desc="Jacob"></type> 
      <type id="07" desc="Joseph"></type> 
     </type> 
    </type> 
    <type id="08" desc="Actors"> 
     ........ 
    </type> 
</data> 

例子:

如果我輸入的是:07

預期成果是:醫生/公立醫院/約瑟夫

我嘗試使用下面xmlpath中與XMLQUERY

SELECT XMLQuery(
'//*[@id="07"]/ancestor::*[@id="01"][1]' 
PASSING MYXMLClob RETURNING CONTENT 
) "myXMLQuery" 
FROM myTable 

回答

0

根據您的預期輸出,它看起來像你試圖驗證你的XPath的基礎上你從中得到的結果。在這種情況下,您已經知道預期的位置,並且想驗證它的絕對路徑,但僅關於desc屬性。

XPath並不是真的被設計爲返回有效查詢的路徑,所以在這方面使用其他方法會容易得多。但是,如果你正在使用XPath卡住了,你可以申請一個解決方法,像這樣:

substring(concat(//*[@id='07']/../../@desc, '/', //*[@id='07']/../@desc, '/', //*[@id='07']/@desc), 0, number(boolean(count(//*[@id='07']))) * string-length(concat(//*[@id='07']/../../@desc, '/', //*[@id='07']/../@desc, '/', //*[@id='07']/@desc))+1) 

但我不建議這個動態/複雜的查詢。