所以我的标题建议:我有一个包含以下相关内容的XML文件
<element>
<id>ID</id>
<content>
<![CDATA[
]]>
</content>
</element>
我正在使用XML :: Simple来解析它:
$localElement = XMLin( $localElementXML, NoAttr=>1, SuppressEmpty=>'' )
导致这个perl哈希:
{
'content' => '',
'id' => 'ID'
};
如果我在空CDATA块的中间插入除空格以外的任何内容,则保留所有空格:
{
'content' => '
--
',
'id' => 'ID'
};
我需要实现的是保留空白(基本上是一个长的空字符串),即使其中间没有其他字符。是的,我正在使用“SuppressEmpty”,但我认为元素不是空的,它是一个充满空格,换行符等的CDATA块。我错过了什么吗?我怎样才能让它发挥作用?我没有找到任何明显的XML :: Simple选项来改变这种行为。
非常感谢。
答案 0 :(得分:3)
这是你的问题:
我正在使用
XML::Simple
解析此问题:
别。 XML::Simple
甚至说'不要使用这个模块'。
不鼓励在新代码中使用此模块。其他模块可用,提供更直接和一致的接口。
原因很简单 - 只有非常简单(或实际上很简单)的XML片段才能通过数组和散列直接表示。
怎么样?#!/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 :"
"
当然,从那里开始,接下来的问题是 - 您希望做什么该内容。