PL SQL XMLDOM更改行结束

时间:2018-02-05 14:19:47

标签: xml linux oracle plsql eol

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

1 个答案:

答案 0 :(得分: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

相关问题