누군가 도움을 주시기 바랍니다.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)에서 catch합니다.
<?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 환영합니다.
환호 빔
'& 결과 번호'노드의 텍스트 값이 아닌 노드 이름입니다. 너는 실제로 무엇을 얻으려고 하는가? 당신이 참조하는'name' 노드의 값은 찾고자하는 문자열입니다, 그래서 당신은 이미 그것을 가지고 있습니다 .... 그래서'name' 노드와 일치하는'value' 노드를 원합니까? –
Thx Alex, 이 값으로 NAME 요소 뒤에 오는 값을 찾고 있습니다. 아래의 게시물을 참조하십시오. 더 많은 테스트를 수행했습니다. – Wim