2013-07-30 10 views
5

DBのテーブルのclob列に格納されているXMLファイルがあります。Oracle DBMS_XMLDOMパッケージのXML要素値を取得

<?xml version="1.0" encoding="UTF-8"?> 
<document> 
    <row> 
    <organization>asdklfjas;kldfj;LASKJFAS</organization> 
    <phones>sjhdfhjaghjskfg</phones> 
    <persons>hkjg</persons> 
    </row>             
</document> 

私はそれを解析するためのDBMS_XMLDOMパッケージを使用しています。

declare 
    v_clob clob; 
    v_doc dbms_xmldom.domdocument; 
begin 
    ... 
    v_doc := dbms_xmldom.newdomdocument(v_clob); 
    v_domelement := dbms_xmldom.getdocumentelement(v_doc); 
    ... 
end; 

たとえば、<persons>のように、いくつかの要素から値を取得する必要があります。どうしたらいいですか?

答えて

1

私は私が探していたものが見つかりました:

... 
v_doc := dbms_xmldom.newdomdocument(v_clob); 
v_nodelist := dbms_xmldom.getelementsbytagname(v_doc, 'persons'); 
v_node := dbms_xmldom.getfirstchild(dbms_xmldom.item(v_nodelist, 0)); 
v_person := dbms_xmldom.getnodevalue(v_node); 
... 
3

一緒のXPathでXSLPROCESSOR機能を使用するオプションもあります。

DECLARE 
    v_Clob CLOB; 
    v_Doc XmlDom.DomDocument; 
    v_RootNode XmlDom.DomNode; 
    v_Value VARCHAR2(128); 
BEGIN 
    ... 

    v_Doc := XmlDom.NewDomDocument(v_Clob); 
    v_RootNode := XmlDom.MakeNode(XmlDom.GetDocumentElement(v_Doc)); 
    v_Value := XmlDom.GetNodeValue(
    XslProcessor.SelectSingleNode(v_RootNode, '/document/row[1]/persons/text()')); 

    ... 
END; 
1

あなたがDBMS_XMLDOMやXSLPROCESSORのいずれかを使用することができるXML要素の値を取得するにはパッケージ。 私の答えhereを参照し、CLOB列からDBMS_XMLDOM.DOMDocumentを参照してください。次に、以下のメソッドを使用して要素の値を抽出します。

FUNCTION Get_Node_Value_From_Doc(
    v_Doc   IN DBMS_XMLDOM.DomDocument) RETURN VARCHAR2 
IS 
    v_Clob CLOB; 
    v_RootNode DBMS_XMLDOM.DomNode; 
    v_Value VARCHAR2(2000); 
BEGIN  
    v_RootNode := DBMS_XMLDOM.MakeNode(XmlDom.GetDocumentElement(v_Doc)); 
    v_Value := DBMS_XMLDOM.GetNodeValue(XslProcessor.SelectSingleNode(v_RootNode, 
    '/soap:Envelope/soap:Body/GetLiveAnalysisIDSResponse[1]/AnalysisIDs[1]/guid[1]/text()' 
    ,'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://www.testkid.net/"')); 
    RETURN v_Value; 
END Get_Node_Value_From_Doc; 

SOAP XMLメッセージを処理するときは、正しい名前空間を指定することが重要です。

関連する問題