在 Oracle SQL 中使用 XML 兼容格式从 XML 提取值
Extractvalue from XML using XML compliant format in Oracle SQL
我有一个要求。我需要查询 table 并通过将转义字符转换为 XML 格式来显示列值
例如“&”到“&”
详情
我有table名字"AppName"
select NAME from AppName
NAME
---------
Oracle & Database
我需要做的是以 XML 兼容格式获取输出。像下面这样的东西
例如:
NAME
------
Oracle & Database
我已经使用 DBMS_XMLGEN 使其成为 XML 投诉并尝试使用 extractvalue 来获取值。但它 return 作为 "Oracle & Database"
下面是要转换为 XML 格式的查询
select SYS.DBMS_XMLGEN.getXML( 'select NAME from APPName ') XML_out from dual
"<?xml version="1.0"?>
<ROWSET>
<ROW>
<NAME>Oracle & 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 & Database"
如何使用 DBMS_XMLGEN 获得此输出,或者有什么简单的方法。
非常感谢任何帮助
您所做的工作超出了您的需要; dbms_xmlgen
有a convert()
function,默认转义特殊字符(实体):
select dbms_xmlgen.convert(name) from appname;
DBMS_XMLGEN.CONVERT(NAME)
--------------------------------------------------------------------------------
Oracle & Database
第二个参数默认为 ENTITY_ENCODE,您可以显式设置它(在普通 SQL 中使用基础值 0)来编码:
select dbms_xmlgen.convert('Oracle & Database', 0) from dual;
DBMS_XMLGEN.CONVERT('ORACLE&DATABASE',0)
--------------------------------------------------------------------------------
Oracle & Database
或对1(ENTITY_DECODE)做逆运算解码:
select dbms_xmlgen.convert('Oracle & Database', 1) from dual;
DBMS_XMLGEN.CONVERT('ORACLE&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 & Database
但在这种情况下,转换为 XML 有点毫无意义。
我有一个要求。我需要查询 table 并通过将转义字符转换为 XML 格式来显示列值 例如“&”到“&”
详情
我有table名字"AppName"
select NAME from AppName
NAME
---------
Oracle & Database
我需要做的是以 XML 兼容格式获取输出。像下面这样的东西 例如:
NAME
------
Oracle & Database
我已经使用 DBMS_XMLGEN 使其成为 XML 投诉并尝试使用 extractvalue 来获取值。但它 return 作为 "Oracle & Database"
下面是要转换为 XML 格式的查询
select SYS.DBMS_XMLGEN.getXML( 'select NAME from APPName ') XML_out from dual
"<?xml version="1.0"?>
<ROWSET>
<ROW>
<NAME>Oracle & 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 & Database"
如何使用 DBMS_XMLGEN 获得此输出,或者有什么简单的方法。
非常感谢任何帮助
您所做的工作超出了您的需要; dbms_xmlgen
有a convert()
function,默认转义特殊字符(实体):
select dbms_xmlgen.convert(name) from appname;
DBMS_XMLGEN.CONVERT(NAME)
--------------------------------------------------------------------------------
Oracle & Database
第二个参数默认为 ENTITY_ENCODE,您可以显式设置它(在普通 SQL 中使用基础值 0)来编码:
select dbms_xmlgen.convert('Oracle & Database', 0) from dual;
DBMS_XMLGEN.CONVERT('ORACLE&DATABASE',0)
--------------------------------------------------------------------------------
Oracle & Database
或对1(ENTITY_DECODE)做逆运算解码:
select dbms_xmlgen.convert('Oracle & Database', 1) from dual;
DBMS_XMLGEN.CONVERT('ORACLE&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 & Database
但在这种情况下,转换为 XML 有点毫无意义。