dbms_xmlgen.SETNULLHANDLING正在转换特殊字符,如&到&

时间:2011-04-19 07:18:28

标签: xml oracle

我正在使用dbms_xmlgen生成xml文档。 要处理空值,我使用dbms_xmlgen.SETNULLHANDLING。但这会将&等特殊字符转换为&。 如何在不使用替换的情况下避免此转换,因为它将扫描整个数据。 请帮助。

1 个答案:

答案 0 :(得分:1)

此行为不是由SETNULLHANDLING函数引起的:这是标准XML。

考虑:

SQL> SET DEFINE OFF
SQL> VARIABLE xml VARCHAR2(4000);
SQL> DECLARE
  2     l_ctx dbms_xmlgen.ctxHandle;
  3  BEGIN
  4     l_ctx := dbms_xmlgen.newcontext('SELECT ''&'' x FROM DUAL');
  5     :xml := dbms_xmlgen.getXML(l_ctx);
  6  END;
  7  /

PL/SQL procedure successfully completed

xml
---------
<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <X>&amp;</X>
 </ROW>
</ROWSET>

生成的XML格式正确。如果将&amp;替换为&,则XML格式不正确。


关于您的评论:只需在输入中使用<>

SQL> SET DEFINE OFF
SQL> VARIABLE xml VARCHAR2(4000);
SQL> BEGIN
  2     :xml := dbms_xmlgen.getXML(
  3                 dbms_xmlgen.newcontext('SELECT ''This is <B>BOLD</B>'' x
  4                                           FROM DUAL'));
  5  END;
  6  /

PL/SQL procedure successfully completed
xml
---------
<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <X>This is &lt;B&gt;BOLD&lt;/B&gt;</X>
 </ROW>
</ROWSET>