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

时间:2016-06-15 04:23:57

标签: xml database oracle plsql plsqldeveloper

我正在尝试解析一个巨大的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和节点名称作为参数,并获得返回的节点值或相关的东西。由于XML太大,使用这种方法将减少不必要的编码。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

Xquery是一个查询和"编程"旨在使用xml文档的语言。 Oracle有两个主要功能,它接受xquery命令。 xmltable和xmlquery。 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>') )