XML DOM。 由名字的第一个孩子的水平获取元素

我有这样的XML:

<root> <element1> <doc>2</doc> </element1> <doc>1</doc> </root>

我想在根元素(值= 1)后的第一个孩子的水平得到元素。 如果我这样做,通过节点列表(XMLDOM API的PL / SQL版):

nl := getElementsByTagName(rootnode,'doc'); len := xmldom.getLength(nl); IF LEN>0 THEN N:=xmldom.item(nl, 0); END IF; RETURN N;

列表中的第一个元素将与值= 2。我怎么会只有通过第一个孩子水平的子节点处理,而无需通过元素循环元素?

--------------解决方案-------------

随着DBMS_XMLDOM使用GETCHILDRENBYTAGNAME:

declare
xml constant xmltype := xmltype(
'<root>
<element1>
<doc>2 - two</doc>
</element1>
<doc>1 - one</doc>
</root>'
);
doc constant dbms_xmldom.domdocument := dbms_xmldom.newdomdocument(xml);

root_elem constant dbms_xmldom.domelement :=
dbms_xmldom.getdocumentelement(doc);

doc_nodes constant dbms_xmldom.domnodelist :=
dbms_xmldom.getchildrenbytagname(root_elem, 'doc');
begin
declare
last_index constant pls_integer := dbms_xmldom.getlength(doc_nodes) - 1;
node dbms_xmldom.domnode;
text_node dbms_xmldom.domnode;
begin
for i in 0 .. last_index loop
node := dbms_xmldom.item(doc_nodes, i);
text_node := dbms_xmldom.getfirstchild(node);
dbms_output.put_line('i = ' || i ||
' name = ' || dbms_xmldom.getnodename(node) ||
' type = ' || dbms_xmldom.getnodetype(node) ||
' text = ' || dbms_xmldom.getnodevalue(text_node));
end loop;
end;
end;
/

输出:

SQL> @so24
i = 0 name = doc type = 1 text = 1 - one

PL/SQL procedure successfully completed.

SQL>

您可以使用xslprocessor包,然后找到使用XPath正确的节点:

nl := xslprocessor.selectnodes(rootnode, 'root/doc');
len := xmldom.getLength(nl);
IF LEN>0 THEN
N:=xmldom.item(nl, 0);
END IF;
RETURN N;

分类:PLSQL 时间:2015-03-15 人气:0
本文关键词: PLSQL,XMLDOM
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.657 (s). 10 q(s)