Oracle XmlQuery检索节点的路径

时间:2014-05-13 10:23:59

标签: sql oracle xpath

我有以下xml,我无法使用xmlquery获取LocationOfNode。有什么建议怎么办?请参阅以下示例,了解我要实现的目标。

 <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

1 个答案:

答案 0 :(得分: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)

但我不会建议动态/复杂查询。