我使用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输出而没有所有无用的空格?
由于
答案 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;