如何从XML :: Simple :: XMLout压缩XML?

时间:2010-11-08 19:40:56

标签: xml perl whitespace xml-simple

我使用XML :: Simple来解析和编辑一个非常大的XML文件,速度是必不可少的(到目前为止,我已经尝试过所有方法的XML :: Simple是最快的)

现在我的所有编辑完成后,我使用XMLout()将XML打印到文档中,尽管它使用适当的缩进打印它,如果这是人类读取但在我的情况下完全无用的话,这很好。

没有空格的输出文件是1.2 Mb,空白是15 Mb。

我一直在使用:

my $string = XMLout($data);
$string =~ s/>[\s]*</></g;
print $out $string;

但它似乎不仅是一个极端的CPU占用并且需要大量的内存。

他们是否可以简单地将我的XML对象作为正确的XML输出而没有所有无用的空格?

由于

3 个答案:

答案 0 :(得分:8)

查看NoIndent选项:从XML ::简单联机帮助页:

  

NoIndent =&gt; 1#out - 很少使用

     

将此选项设置为1以禁用“XMLout()”的默认值'漂亮   打印'模式。启用此选项后,XML输出将全部完成   在一条线上(除非数据中有换行符) - 这可能是   更容易进行下游处理。

     

NormaliseSpace =&gt; 0│1│2#in-handy

     

此选项控制如何处理文本内容中的空格。   该选项的公认价值为:

     
      
  • 0 =(默认)空格不加改变地传递(当然除了空格的空格式化)      属性值由XML建议强制执行)

  •   
  • 1 =在用作散列键的任何值中将空格规范化(规范化意味着删除前导和尾随白色 -      将空白字符的步调和折叠到一个空格中)

  •   
  • 2 =在所有文本内容中对空格进行规范化

         

    注意:如果更自然,你可以用'z'拼写这个选项   对你而言。

  •   

答案 1 :(得分:2)

只需在对XMLout()的调用中设置NoIndent选项即可。像这样:

my $string = XMLout($data, NoIndent=>1);

多田!

答案 2 :(得分:0)

事件驱动的XML解析器将比需要将所有内容一次加载到内存中的内容更快。

你不应该在你的模式中做太多额外的工作!试试这个:

$string =~ s/>\s+</></g;