我需要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'属性
-
返回匹配元素的完整路径
先感谢您 .
亚当