【问题标题】:Encoding strings in XML from Oracle query从 Oracle 查询中编码 XML 中的字符串
【发布时间】:2010-12-10 21:11:19
【问题描述】:

我正在 Oracle 中直接从 PL/SQL 生成 XML。

在特殊字符和字符编码方面,确保输出字符串符合 XML 的首选方法是什么?

大部分 XML 文件是静态的,我们只需要输出几个字段的数据。

我认为不好的做法示例:

DECLARE @s AS NVARCHAR(100)
SELECT  @s = 'Test chars = (<>, æøåÆØÅ)'

SELECT  '<?xml version="1.0" encoding="UTF-8"?>'
      + '<root><foo>'
      + @s
      + '</foo></root>' AS XML

【问题讨论】:

  • 你从什么制作 XML?如果您使用现有数据,请查看 XMLGEN 函数。
  • 我倾向于同意在 Oracle 数据库中使用 T-SQL 语法应该被认为是不好的做法 ;)
  • @APC:呵呵,谢谢你的提示。 (是的,我是 PL/SQL 新手)

标签: sql xml oracle utf-8 plsql


【解决方案1】:
select dbms_xmlgen.getXML('select * from yourtable');

【讨论】:

    【解决方案2】:

    使用 XmlElement, XmlAttribute, ... 是生成 xml 的最佳方式。
    以下链接对所有功能进行了很好的介绍:
    http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#ADXDB1620

    如果您想了解更多方法,请看这里
    http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#sthref1486

    Whatchout 用于编码。如果您在客户端会话中运行 pl/sql 程序或选择生成 xml。 xml 使用客户端代码页进行编码。如果您在后台作业中运行它(使用 dbms_job 或 dbms_scheduler),它会使用数据库代码页进行编码。

    【讨论】:

      【解决方案3】:

      我发现有两种生成 XML 的好方法。一个是 SYS.XMLDOM 包,它本质上是 Java DOM API 的包装器。它有点笨拙,因为 pl/sql 不具备 Java 的多态能力,因此您必须经常将元素显式“转换”到节点,反之亦然才能使用包中的方法。

      IMO 最酷的技术是使用 XMLElement 等 SQL 函数,如下所示:

      SET SERVEROUTPUT ON SIZE 1000000;
      DECLARE
      
          v_xml XMLTYPE;
      
      BEGIN
      
          SELECT
              XMLElement( "dual",
                  XMLAttributes( dual.dummy AS "dummy" )
              )
          INTO
              v_xml
          FROM
              dual;
      
          dbms_output.put_line( v_xml.getStringVal() );
      
      END;
      /
      

      如果您的 XML 结构不是很复杂并且很容易映射到您的表结构,那么这会非常方便。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        • 2023-03-10
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        相关资源
        最近更新 更多