代码之家  ›  专栏  ›  技术社区  ›  csl

从Oracle查询对XML中的字符串进行编码

  •  2
  • csl  · 技术社区  · 16 年前

    我正在从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
    
    3 回复  |  直到 13 年前
        1
  •  2
  •   kurosch    16 年前

    我发现有两种生成XML的好方法。一个是SysXMLDOM包,它基本上是Java DOM API周围的包装器。它有点笨拙,因为PL/SQL没有Java的多态能力,所以您必须不断地将元素“铸造”到节点,反之亦然,使用包中的方法。

    最酷的方法是使用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结构不是很复杂,并且很容易映射到表结构,那么这非常方便。

        2
  •  2
  •   Christian13467    16 年前

    使用xmlement、xmltattribute,…是生成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

    什么是编码。如果在客户机会话中运行pl/sql程序或选择生成XML。XML是用客户端代码页编码的。如果您在后台作业(使用dbms-job或dbms-scheduler)中运行它,它将使用数据库代码页进行编码。

        3
  •  1
  •   j0k gauthamp    13 年前
    select dbms_xmlgen.getXML('select * from yourtable');