如何解析Oracle CLOB XML数据获取节点值?

How to parse Oracle CLOB XML data to get node value?

我正在尝试解析大量 XML CLOB 数据以获取一些节点值。所以我在 DBMS_XMLPARSER 的帮助下编写了一个方法来检索节点的值并且它工作正常。

FUNCTION Get_Node_Value(
      node_ IN DBMS_XMLDOM.DOMNode) RETURN VARCHAR2
   IS
      sub_nodes_list_  DBMS_XMLDOM.DOMNodeList;
      sub_nodes_len_   NUMBER;
      value_node_      DBMS_XMLDOM.DOMNode;
      value_           VARCHAR2(50);
   BEGIN
      sub_nodes_list_ := DBMS_XMLDOM.Getchildnodes(node_); 
      sub_nodes_len_  := DBMS_XMLDOM.GetLength(sub_nodes_list_); -- sub_nodes_len_ should be 1
      IF ( sub_nodes_len_ > 0 ) THEN
            value_node_ := DBMS_XMLDOM.Item(sub_nodes_list_, 0);
            value_      := DBMS_XMLDOM.GetNodeValue(value_node_);
      END IF;      
      RETURN value_;
   END Get_Node_Value;

但我想知道有一个通用方法,我将 XML CLOB 和节点名称作为参数并获取节点值 return 或相关的东西。由于XML太大,使用这种方法会减少不必要的编码。任何帮助将不胜感激!

Xquery 是一种查询和 "programing" 语言,设计用于处理 xml 文档。 Oracle 有两个接受 xquery 命令的主要函数。 xml表和xml查询。 usign xmltable and xmlquery

简短示例。

select * from xmltable('/ROWSET/ROW/TABLE_NAME/text()' passing xmltype('<?xml version="1.0"?>
                                    <ROWSET>
                                     <ROW>
                                      <TABLE_NAME>DBA_2PC_NEIGHBORS</TABLE_NAME>
                                      <COMMENTS>information about incoming and outgoing connections for pending transactions</COMMENTS>
                                     </ROW>
                                     <ROW>
                                      <TABLE_NAME>DBA_2PC_PENDING</TABLE_NAME>
                                      <COMMENTS>info about distributed transactions awaiting recovery</COMMENTS>
                                     </ROW>
                                     <ROW>
                                      <TABLE_NAME>DBA_ADDM_FDG_BREAKDOWN</TABLE_NAME>
                                     </ROW>
                                    </ROWSET>') )