PL SQL XMLDOM 更改行结束

Posted

技术标签:

【中文标题】PL SQL XMLDOM 更改行结束【英文标题】:PL SQL XMLDOM change line ending 【发布时间】:2018-02-05 14:19:46 【问题描述】:

我想知道在将 xmldom 写入文件时是否可以设置 EOL。数据库是在 linux 机器上设置的,但我需要将它保存到一个以 CR LF 行结尾的文件中,我真的不知道如何。

【问题讨论】:

【参考方案1】:

根据您的问题,我假设您使用的是 DBMS_XMLDOM。不幸的是,DBMS_XMLDOM.WRITETOFILE 过程实际上并没有很多选项来控制序列化/漂亮打印。我的版本(12.1)有一个未记录的 pflag 参数,通过试验,它看起来像值 4 删除了所有空格和换行符。这在某些情况下很方便,但我认为这不是您想要的。

DBMS_XMLDOM.WRITETOFILE(doc, 'MY_DIR/xmltest1.xml', 4, 0); 

Oracle 使用适合您的服务器(Windows、Unix)的任何类型的换行符进行漂亮打印。如果您想使用不同类型的换行符,我认为您最好的选择是将 XML 打印到 CLOB,用 CRLF 替换 LF,然后将 clob 写入文件。

DECLARE
 rc sys_refcursor;
 doc DBMS_XMLDOM.DOMDocument;
 sdoc clob;
BEGIN
 OPEN rc FOR SELECT * FROM ( SELECT rownum FROM dual CONNECT BY level < 50000 );
 doc := DBMS_XMLDOM.NewDOMDocument(xmltype( rc ));
 dbms_lob.createtemporary(sdoc, true);
 dbms_xmldom.writetoclob(doc, sdoc);
 sdoc := replace(sdoc, chr(10), chr(13)||chr(10));
 DBMS_XSLPROCESSOR.clob2file(sdoc, 'MY_DIR', 'xmltest_crlf.xml');
END; 
/

(此示例代码假设您有一个可以写入的名为 MY_DIR 的目录。)

Check out this article 了解有关 XML 到文件性能的更多详细信息。

如果这是一个非常大的 XML 文件并且 replace() 函数性能不佳,您可以考虑在输出文件上使用 linux 命令unix2dos

【讨论】:

将 XML 打印到 CLOB 并使用 replace() 可以解决问题。非常感谢。

以上是关于PL SQL XMLDOM 更改行结束的主要内容,如果未能解决你的问题,请参考以下文章

将 100,000 条记录从 PL/SQL 程序输出到 XML 文件的最佳方法

pl/sql:将 xmltype 转换为节点

使用 Microsoft.xmldom 更改 XML 元素的命名空间前缀,以便利用 GetElementsByTagName

Oracle dbms_xmldom 如何创建blob节点?

PHP PHP - XmlDom php4tophp5

js 创建xml元素