【问题标题】:Extractvalue from XML using XML compliant format in Oracle SQL在 Oracle SQL 中使用符合 XML 的格式从 XML 中提取值
【发布时间】:2015-07-17 16:57:57
【问题描述】:

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

详情

我有表名“AppName”

select NAME from AppName

NAME
---------
Oracle & Database

我需要做的是获得符合 XML 格式的输出。像下面的东西 例如:

NAME
------
Oracle & Database

我已使用 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>
 "

然后我尝试提取名称

select extractvalue( XMLType.createXML(SYS.DBMS_XMLGEN.getXML( 'select NAME from APPNAme' )),'/ROWSET/ROW/NAME') XML_out from dual

which return back the output same as "Oracle & Database"  
But i need output as "Oracle &amp; Database"

如何使用 DBMS_XMLGEN 获得此输出,或者有什么简单的方法。

非常感谢任何帮助

【问题讨论】:

    标签: oracle dbms-xmlgen


    【解决方案1】:

    你做的工作超出了你的需要; dbms_xmlgen 有a convert() function,默认转义特殊字符(实体):

    select dbms_xmlgen.convert(name) from appname;
    
    DBMS_XMLGEN.CONVERT(NAME)                                                      
    --------------------------------------------------------------------------------
    Oracle &amp; Database                                                           
    

    第二个参数默认为 ENTITY_ENCODE,您可以将其显式设置(使用普通 SQL 中的基础值 0)进行编码:

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

    或对1(ENTITY_DECODE)做逆运算和解码:

    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 有点毫无意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2014-01-19
      • 2020-09-20
      • 1970-01-01
      • 2017-05-05
      相关资源
      最近更新 更多