2017-06-22 33 views
0

我試圖解析以下SOAP響應:apex_web_service.parse_xml不解析 '&' 字符

要做到這一點,我運行一個PL/SQL函數:

l_xml := apex_web_service.make_request(
 
     p_url => 'http://eu-soaaut1-dv.abcdef.com/soa- 
 
      infra/services/Sponsor/getProject', 
 
     p_action => 'http://abcdef.com', 
 
     p_envelope => l_envelope); 
 

 
l_result := apex_web_service.parse_xml(
 
      p_xml => l_xml, 
 
      p_xpath => ' //tns:project', 
 
      p_ns => ' xmlns:tns="http://abcdef.com"'); 
 

 
    END;

另外我試圖用下面的查詢將解析的XML插入到一個表中:

insert into dummy_web_services values(l_result);

因爲我通過給他們各自的學習號碼得到一些項目的項目細節。但對於一些項目,我收到以下錯誤:

ORA-31011: XML parsing failed 
ORA-19213: error occurred in XML processing at lines 21 
LPX-00242: invalid use of ampersand ('&') character (use &) 

按我的理解,它不解析「&」字是有我的項目的詳細數據。任何人都可以請建議我如何克服這個問題。

非常感謝提前。

+0

XML有一些轉義字符,你可以用'&'替換XML中的所有'&',有時候SQL客戶端不允許這樣做,所以你可以使用''&'替換''''。 'amp;'' –

+0

你可以檢查,你在哪裏得到錯誤,是使用'replace'還是'insert' –

回答

0

'&'需要被替換,否則XML解析將不起作用。

存放在CLOB數據類型變量中的XML對象,也可以存儲在VARCHAR2,如果你知道數據小於4000個字符,在這種情況下使用getStringVal

var_clob := l_xml.getClobVal; 

替換「&」

var_clob := replace(var_clob, '&', '&' || 'amp;') 

的Clob到XMLTYPE再次

l_xml := SYS.XMLTYPE.CREATEXML(var_clob); 

REPLACE不能在XMLTYPE上使用。

+0

@ Anji007更新回答 –

+0

非常感謝您的幫助。現在我可以獲得所有項目的項目詳情。 – Anji007