Perl:在xml文件中保留空CDATA块中的空格

时间:2015-10-17 15:05:10

标签: xml perl xml-parsing

所以我的标题建议:我有一个包含以下相关内容的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选项来改变这种行为。

非常感谢。

1 个答案:

答案 0 :(得分:3)

这是你的问题:

  

我正在使用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 :" 



        "

当然,从那里开始,接下来的问题是 - 您希望做什么该内容。