quo*_*ame 2 xml plsql count nodes
我正在与 Oracle 合作。
有没有办法使用 PL/SQL 计算 XML 文件中的节点(包括后代)的数量?
我希望能够将结果保存为变量以用作循环迭代器的上限。
我有以下xml,我想计算行节点内的节点数:
<row>
<date name="date1" id="101"></date>
<element1 name="ele1" id="111">
<stuff></stuff>
<stuff></stuff>
<stuff></stuff>
</element1>
<element2 name="ele2" id="121"></element2>
<element3 name="ele3" id="131></element15>
</row>
Run Code Online (Sandbox Code Playgroud)
结果应该是 7。
@johnbk 我正在与 Oracle 合作
这里的想法是,在获得节点数后,我可以将其用于:
nodeCount := 1;
FOR i IN 1 .. numNodes
LOOP
xpath1 := '/row/*[' || nodeCount || ']/@name';
SELECT EXTRACT(form_xml, xpath1) as other_name;
nodeCount := nodeCount +1;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
我希望能够将结果保存为变量以用作循环迭代器的上限。
我想这与您的另一个问题有关?
您不需要知道节点数,因为您不必自己显式循环 xml。您可能正试图以次优的方式解决您的实际问题。
下面是如何使用XMLQUERY找到您要查找的号码的方法:
declare
v_data constant xmltype := xmltype('<row>
<date name="date1" id="101"></date>
<element1 name="ele1" id="111">
<stuff></stuff>
<stuff></stuff>
<stuff></stuff>
</element1>
<element2 name="ele2" id="121"></element2>
<element3 name="ele3" id="131"></element3>
</row>');
v_count xmltype;
begin
select xmlquery('count($doc/row/descendant::*)'
passing v_data as "doc"
returning content)
into v_count from dual;
dbms_output.put_line('count = ' || v_count.getstringval);
end;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16224 次 |
| 最近记录: |