我正在使用dbms_xmlgen生成xml文档。
要处理空值,我使用dbms_xmlgen.SETNULLHANDLING。但这会将&
等特殊字符转换为&
。
如何在不使用替换的情况下避免此转换,因为它将扫描整个数据。
请帮助。
答案 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>&</X>
</ROW>
</ROWSET>
生成的XML格式正确。如果将&
替换为&
,则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 <B>BOLD</B></X>
</ROW>
</ROWSET>