誰かが助けてくれることを願っています。XMLTYPEの要素を読み取る
PLSQL内ではSOAPコールを行い、SOAPからXML結果を受け取ります。 要素値を取得する必要があります。
これは、このXMLにうまく働いた:このコードで
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:executeObjectResponse xmlns:ns2="http://www.uc4.com/uc4/">
<runID>1120864</runID>
</ns2:executeObjectResponse>
</S:Body>
</S:Envelope>
を:
declare
v_doc DBMS_XMLDOM.DOMDocument;
v_Value VARCHAR2 (2000);
v_node DBMS_XMLDOM.DOMNode;
v_nodelist DBMS_XMLDOM.DOMNodelist;
begin
... XML result from soap call catched in CLOB => l_result
v_doc := DBMS_XMLDOM.newdomdocument (l_result);
v_nodelist := DBMS_XMLDOM.getelementsbytagname (v_doc, 'runID');
v_node := DBMS_XMLDOM.getfirstchild (DBMS_XMLDOM.item (v_nodelist, 0));
v_value := DBMS_XMLDOM.getnodevalue (v_node);
DBMS_OUTPUT.put_line ('value a: ' || v_Value);
value a: 1120864
は、しかし私は、次のXMLの問題を持っています。 私はこのタグの値を取得する必要があります。
<name>&RESULT#</name>
、私はいくつかのことを試してみましたが、ちょうどpropperコードを見つけることができません。
SOAPの結果はCLOB(l_result)で捕捉されます。
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTaskDetailsResponse xmlns:ns2="http://www.uc4.com/uc4/">
<groups>
<name>General</name>
<label>SCRI.ADP.SOAP.TEST (1120864)</label>
<items>
<name>Object name</name>
<value>SCRI.ADP.SOAP.TEST</value>
</items>
<items>
<name>Queue</name>
<value>CLIENT_QUEUE</value>
</items>
<items>
<name>Version</name>
<value>6</value>
</items>
<items>
<name>RunID</name>
<value>1120864</value>
</items>
<items>
<name>Activator</name>
<value>1115216</value>
</items>
<items>
<name>User</name>
<value>ADP_SOAP/ADP</value>
</items>
<items>
<name>Activation</name>
<value>2017-05-24T13:38:44</value>
</items>
<items>
<name>Start</name>
<value>2017-05-24T13:38:45</value>
</items>
<items>
<name>End</name>
<value>2017-05-24T13:38:45</value>
</items>
<items>
<name>Runtime</name>
<value>0:00:00</value>
</items>
<items>
<name>Status</name>
<value>ENDED_OK - ended normally</value>
</items>
<items>
<name>Return code</name>
<value>0</value>
</items>
<items>
<name>Event ID</name>
<value>1120864</value>
</items>
<items>
<name>Enable Rollback</name>
<value>No</value>
</items>
</groups>
<groups>
<name>Object variables</name>
<label>SCRI.ADP.SOAP.TEST (1120864)</label>
<items>
<name>&EXT_HOSTNAME#</name>
<value>sz4183</value>
</items>
<items>
<name>&EXT_SOAP_ID#</name>
<value>sz4183</value>
</items>
<items>
<name>&EXT_SOAP_WF#</name>
<value>JOBP.ADP.SOAP_TEST1</value>
</items>
<items>
<name>&RESULT#</name>
<value>/dev;/u01;/etc/mnttab;/etc/dfs/sharetab;/dev/fd;/export;/rpool;/mnt/ora_dba</value>
</items>
</groups>
</ns2:getTaskDetailsResponse>
</S:Body>
</S:Envelope>
私は成功せず、これで遊ん:
declare
v_doc DBMS_XMLDOM.DOMDocument;
v_Value VARCHAR2 (2000);
v_node DBMS_XMLDOM.DOMNode;
v_nodelist DBMS_XMLDOM.DOMNodelist;
begin
... XML result from soap call catched in CLOB => l_result
v_doc := DBMS_XMLDOM.newdomdocument (l_result);
v_nodelist := DBMS_XMLDOM.getelementsbytagname (v_doc, '&RESULT#');
v_node := DBMS_XMLDOM.getfirstchild (DBMS_XMLDOM.item (v_nodelist, 0));
v_value := DBMS_XMLDOM.getnodevalue (v_node);
DBMS_OUTPUT.put_line ('value: ' || v_Value);
end;
すべてsugestionsは歓迎されています。
歓声 ヴィム
'&のRESULT#'ノードのテキスト値ではなく、ノード名です。あなたは実際に何を得ようとしていますか?あなたが参照している 'name'ノードの値はあなたが探している文字列なので、既にそれを持っています....その' name'ノードに一致する 'value'ノードが必要ですか? –
Thx Alex、 私はこの値を持つ要素NAMEの後の値を探しています。 以下の記事を参照してください。もう少しテストしました – Wim