在Oracle SQL中使用XML兼容格式从XML中提取值

在Oracle SQL中使用XML兼容格式从XML中提取值,oracle,dbms-xmlgen,Oracle,Dbms Xmlgen,我有一个要求。我需要查询一个表,并通过将转义字符转换为XML格式来显示列值 示例“&”到“&” 详细信息 我有表名“AppName” 我需要做的是以XML兼容的格式获取输出。像下面这样 例如: 我使用了DBMS_XMLGEN使其成为XML投诉,并尝试使用extractvalue来获取值。但它返回为“Oracle&数据库” 下面是要转换为XML格式的查询 select SYS.DBMS_XMLGEN.getXML( 'select NAME from APPName ') XML_out from

我有一个要求。我需要查询一个表,并通过将转义字符转换为XML格式来显示列值 示例“&”到“&”

详细信息

我有表名“AppName”

我需要做的是以XML兼容的格式获取输出。像下面这样 例如:

我使用了DBMS_XMLGEN使其成为XML投诉,并尝试使用extractvalue来获取值。但它返回为“Oracle&数据库”

下面是要转换为XML格式的查询

select SYS.DBMS_XMLGEN.getXML( 'select NAME from APPName ') XML_out from dual

"<?xml version="1.0"?>
 <ROWSET>
 <ROW>
  <NAME>Oracle &amp; Database<NAME>
  </ROW>
 </ROWSET>
 "
如何使用DBMS_XMLGEN获得此输出,或者是否有任何简单的方法


非常感谢您的帮助

您所做的工作超出了您的需要
dbms_xmlgen
has,默认情况下会转义特殊字符(实体):

select dbms_xmlgen.convert(name) from appname;

DBMS_XMLGEN.CONVERT(NAME)                                                      
--------------------------------------------------------------------------------
Oracle &amp; Database                                                           
第二个参数默认为实体_ENCODE,您可以显式(使用普通SQL中的基础值0)设置该参数进行编码:

select dbms_xmlgen.convert('Oracle & Database', 0) from dual;

DBMS_XMLGEN.CONVERT('ORACLE&DATABASE',0)                                       
--------------------------------------------------------------------------------
Oracle &amp; Database                                                           
或到1(实体_解码)执行反向操作并解码:

select dbms_xmlgen.convert('Oracle &amp; Database', 1) from dual;

DBMS_XMLGEN.CONVERT('ORACLE&AMP;DATABASE',1)                                   
--------------------------------------------------------------------------------
Oracle & Database                                                               

如果您已经有了XMLType,或者出于其他原因希望它采用该格式,则可以使用XMLQuery而不是extractValue:

select xmlquery('/ROWSET/ROW/NAME/text()'
  passing XMLType.createXML(SYS.DBMS_XMLGEN.getXML('select name from appname'))
  returning content) XML_out from dual;

XML_OUT                                                                        
--------------------------------------------------------------------------------
Oracle &amp; Database
但在这种情况下,转换为XML有点毫无意义

select dbms_xmlgen.convert('Oracle & Database', 0) from dual;

DBMS_XMLGEN.CONVERT('ORACLE&DATABASE',0)                                       
--------------------------------------------------------------------------------
Oracle &amp; Database                                                           
select dbms_xmlgen.convert('Oracle &amp; Database', 1) from dual;

DBMS_XMLGEN.CONVERT('ORACLE&AMP;DATABASE',1)                                   
--------------------------------------------------------------------------------
Oracle & Database                                                               
select xmlquery('/ROWSET/ROW/NAME/text()'
  passing XMLType.createXML(SYS.DBMS_XMLGEN.getXML('select name from appname'))
  returning content) XML_out from dual;

XML_OUT                                                                        
--------------------------------------------------------------------------------
Oracle &amp; Database