【发布时间】:2012-11-08 20:27:36
【问题描述】:
对于这个 xml 文件:
<ROOT>
<A>
<B>2</B>
<C>3</C>
<D>
<E>12</E>
</D>
<F/>
<G/>
</A>
</ROOT>
如何获得像 B 和 C 这样的节点数,其中有一个值但没有子节点?
在这种情况下,数字应该是2。
【问题讨论】:
对于这个 xml 文件:
<ROOT>
<A>
<B>2</B>
<C>3</C>
<D>
<E>12</E>
</D>
<F/>
<G/>
</A>
</ROOT>
如何获得像 B 和 C 这样的节点数,其中有一个值但没有子节点?
在这种情况下,数字应该是2。
【问题讨论】:
如果你知道你想要哪个特定节点(大多数时候你知道)我更喜欢使用 XPath 来选择节点(更少的编码)。
考虑这个简短的示例:
set serveroutput on;
declare
XML CLOB;
XML_DOCUMENT DBMS_XMLDOM.DOMDOCUMENT;
XML_NODE DBMS_XMLDOM.DOMNODE;
begin
XML := '
<ROOT>
<A>
<B>2</B>
<C>3</C>
<D>
<E>12</E>
</D>
<F/>
<G/>
</A>
</ROOT>
';
XML_DOCUMENT := DBMS_XMLDOM.NEWDOMDOCUMENT(XML);
XML_NODE := DBMS_XMLDOM.MAKENODE(XML_DOCUMENT);
XML_NODE := DBMS_XSLPROCESSOR.SELECTSINGLENODE(XML_NODE,'ROOT/A/B/text()');
IF(DBMS_XMLDOM.ISNULL(XML_NODE) = FALSE)
THEN
dbms_output.put_line(DBMS_XMLDOM.GETNODEVALUE(XML_NODE));
END IF;
end;
【讨论】: