的Perl:保留空CDATA块空白在XML文件中
问题描述:
使我的标题所暗示的:我有以下相关内容的Perl:保留空CDATA块空白在XML文件中
<element>
<id>ID</id>
<content>
<![CDATA[
]]>
</content>
</element>
我使用XML ::简单解析这个XML文件:
$localElement = XMLin($localElementXML, NoAttr=>1, SuppressEmpty=>'')
导致这个Perl中的哈希:
{
'content' => '',
'id' => 'ID'
};
如果我插入空格比任何其他在中间的那个空CDATA块,所有的空白被保留:
{
'content' => '
--
',
'id' => 'ID'
};
我需要做到的,是为要保留空白(在基本上长,空字符串),即使有在它的中间没有其他字符。是的,我正在使用“SuppressEmpty”,但我认为元素不是空的,它是一个充满空间,换行符等的CDATA块。我错过了什么吗?我怎样才能使这个工作?我还没有发现任何明显的XML :: Simple选项来改变这种行为。
非常感谢。
答
这里是你的问题:
我使用
XML::Simple
解析这个:
不要。 XML::Simple
甚至说'不要使用这个模块'。
使用本模块中新代码是不鼓励。其他模块可提供更直接和一致的接口。
原因很简单 - 只能通过数组和哈希来直接表示非常简单(或者确实简单)的XML片段。
如何XML::Twig
:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new('pretty_print' => 'indented_a')->parse(\*DATA);
$twig->print;
my $content = $twig->root->first_child('content')->text;
print "Content is :\"", $content, "\"\n";
__DATA__
<element>
<id>ID</id>
<content>
<![CDATA[
]]>
</content>
</element>
它打印:
<element>
<id>ID</id>
<content><![CDATA[
]]></content>
</element>
Content is :"
"
当然,从那里,接下来的问题是 - 你要什么给做与的内容。
简单地说,[XML ::简单](http://metacpan.org/module/XML::Simple)是可怕的。不要使用它。它自己的文档说*不鼓励在新代码中使用这个模块。其他模块可提供更直接和一致的接口。* – Borodin