apex_web_service.parse_xml 不解析“&”字符

Posted

技术标签:

【中文标题】apex_web_service.parse_xml 不解析“&”字符【英文标题】:apex_web_service.parse_xml not parsing '& ' character 【发布时间】:2017-06-22 09:20:59 【问题描述】:

我正在尝试解析以下 SOAP 响应:

为此,我运行了一个 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 &)

据我了解,它没有解析我的项目详细数据中的“&”字符。谁能建议我如何克服这个问题。

非常感谢。

【问题讨论】:

XML 有一些转义字符,您可以将 XML 中的所有 & 替换为 &,有时 SQL 客户端不允许这样做,因此您可以使用 replace & 和 @987654328 @ 你能检查一下,你在哪里得到了错误,是在使用replace还是在insert 【参考方案1】:

'&' 无论如何都需要替换,否则 XML 解析将不起作用。

将 XML 对象存储在 CLOB 数据类型变量中,也可以存储在 VARCHAR2 中,如果您知道数据少于 4000 个字符,在这种情况下使用 getStringVal

var_clob := l_xml.getClobVal;

替换'&'

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

再次转换为 XMLType

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

REPLACE 不能用于 XMLTYPE。

【讨论】:

非常感谢您的帮助。现在我可以获取所有项目的项目详细信息。

以上是关于apex_web_service.parse_xml 不解析“&”字符的主要内容,如果未能解决你的问题,请参考以下文章