XML 从 Oracle 9i 迁移到 11g 的处理问题

XML processing issue migrating from Oracle 9i to 11g

以下代码的输出在 Oracle 9i (9.2.0.8.0) 和 11g (11.2.0.3.0) 上有所不同:

DECLARE 
  var       XMLType; 
  doc       DBMS_XMLDOM.DOMDocument; 
  ndoc      DBMS_XMLDOM.DOMNode; 
  buf       VARCHAR2(2000);

  pd       DBMS_XMLDOM.DOMDocument; 
  v_parser dbms_xmlparser.parser;
BEGIN 
  var := XMLType('<PERSON><NAME>                </NAME></PERSON>');

  -- Create DOMDocument handle
  doc     := DBMS_XMLDOM.newDOMDocument(var); 
  ndoc    := DBMS_XMLDOM.makeNode(doc);

  DBMS_XMLDOM.writeToBuffer(ndoc, buf);
  DBMS_OUTPUT.put_line('Before:'||buf);


  v_parser := dbms_xmlparser.newparser;
  DBMS_XMLPARSER.PARSEBUFFER(v_parser, buf);

  pd := dbms_xmlparser.getdocument(v_parser);
  ndoc    := DBMS_XMLDOM.makeNode(pd);

  DBMS_XMLDOM.writeToBuffer(ndoc, buf);
  DBMS_OUTPUT.put_line('now:'||buf);

END;
/

在 9i 上它的输出是:

Before:<PERSON>
  <NAME/>
</PERSON>

now:<PERSON>
  <NAME/>
</PERSON>

在 11g 上我得到:

Before:<PERSON>
  <NAME>                </NAME>
</PERSON>

now:<PERSON>
  <NAME>                </NAME>
</PERSON>

我在 11g 上执行此操作时需要有 9i 输出,我应该做些什么更改。我尝试使用解析器,但没有用。

解决方案是修复生成白色的代码space 一旦下面的代码

问题就解决了
var := XMLType('<PERSON><NAME>                </NAME></PERSON>');

改写如下:

var := XMLType('<PERSON><NAME></NAME></PERSON>');