我需要xmltype表中的xpath搜索帮助:

create table TOPOLOGY of xmltype
xmltype store as SECUREFILE BINARY XML
xmlschema "topology.xsd"
element "root";

topology.xsd将XML结构定义为包含嵌套元素的元素 . 每个元素都有'id','name'和'type'属性 . 每个项目可能包含0 .. *子项目 .

表总是包含单行(单个xml) . 我需要使用xpath查询搜索特定项目并返回包含以下数据的refcursor(用于匹配元素):

  • 属性值
    父项元素的

  • id属性

  • 绝对路径(/ root / item [...] /.../ item [...])

我只能返回属性值,但我无法获得其他两个要求 . 我目前的解决方案是:

procedure search_tree(xpath in varchar2, output out sys_refcursor) as
begin
  open output for
    select *
    from TOPOLOGY t, xmltable(
        '*' passing t.extract(xpath)
        columns
            id varchar2(255) path '@id',
            name varchar2(255) path '@name',
            type_name varchar2(255) path '@type',
        );
END search_tree;

在这里,在SO上,我找到了一个使用XQuery获取父节点的解决方案:

select *
from TOPOLOGY t, xmltable(
'for $i in $xp let $parentId := $i/../@id
return <r id="{$i/@id}" name="{$i/@name}" typeId="{$i/@type}" parentId="{$parentId}" />'
passing t.object_value, xpath as "xp"
columns id varchar2(255) path '@id', name varchar2(255) path '@name', type varchar2(255) path '@type', parent_xid varchar2(255) path '@parentId');

但xpath传递的$ xp变量导致问题,代码不起作用 . 我找不到如何获得找到元素的完整路径 . 总结这一切,我需要找到一种方法,如何:

  • 返回父项的'id'属性

  • 返回匹配元素的完整路径

先感谢您 .

亚当