Oracle的EXTRACT功能是否打破了XMLELEMENT中的NOENTITYESCAPING
发布时间:2020-12-12 13:14:39 所属栏目:百科 来源:网络整理
导读:Oracle 11g.我想通过如果我将NOENTITYESCAPING添加到 XMLELEMENT函数,它很好地关闭实体转义.但是,当我将结果传递给EXTRACT时,逃逸似乎又回来了. select xmlelement(NOENTITYESCAPING e,id,'-') from (select level as id from dual connect by level 6) XMLE
Oracle 11g.我想通过如果我将NOENTITYESCAPING添加到
XMLELEMENT函数,它很好地关闭实体转义.但是,当我将结果传递给EXTRACT时,逃逸似乎又回来了.
select xmlelement(NOENTITYESCAPING e,id,'->') from (select level as id from dual connect by level < 6) XMLELEMENT(NOENTITYESCAPINGE,ID,'->') --------------------------------------- <E>1-></E> <E>2-></E> <E>3-></E> <E>4-></E> <E>5-></E> 现在,添加EXTRACT: select xmlelement(NOENTITYESCAPING e,'->').extract('//text()') from (select level as id from dual connect by level < 6) XMLELEMENT(NOENTITYESCAPINGE,'->').EXTRACT('//TEXT()') ---------------------------------------------------------- 1-> 2-> 3-> 4-> 5-> 是否有任何修复/解决方法可以关闭转义? manual没有给出任何帮助. 解决方法尝试使用extractvalue()函数,它取代了extract()来代替编码实体.这是一个例子:clear screen; column res format a20; -- depending on a situation,NOENTITYESCAPING might be dropped select extractvalue( xmlelement(NOENTITYESCAPING e,'->'),'//text()' ) as res from (select level as id from dual connect by level < 6) 结果: RES -------------------- 1-> 2-> 3-> 4-> 5-> 但是extractvalue()函数的使用可能受限于它只能返回一个节点的值这一事实.在返回多个节点的值的情况下,utl_i18n包和该包的unescape_reference()函数可用于取消编码实体: clear screen; column res format a20; select utl_i18n.unescape_reference(xmlelement(root,xmlelement(node1,'>'),xmlelement(node2,'<') ).extract('//text()').getstringval() ) as res from dual connect by level <= 3; 结果: RES -------------------- >< >< >< 是的,因为utl_i18n.unescape_reference()函数只接受varchar2数据类型的值和可以隐式转换为varchar2数据类型的类型,所以在处理大型“字符串”时,你的双手是绑定的.在这种情况下,您可以转向dbms_xmlgen包和特别是convert()函数,它具有能够接受CLOB的重载版本.这是一个例子: select dbms_xmlgen.convert( xmlagg(xmlelement(root,'<') ) ).extract('//text()').getclobval(),1) as res from dual connect by level <= 3000; -- 1 (second parameter of the convert() function) -- instructs function to decode entities 结果: RES ------------------------------------------------------ ><><><><><><><><><><><><><><><><><><><><><><><><><> -- ... the rest of the CLOB (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |