在Perl中,我使用XML::Twig
来读取XML文件。某些属性的文本如下所示:
<p>Here is some text.</p>

<p>Some more text.
我正在将此属性读入名为$Body
的变量中。我想将这个变量打印到文件而不插入字符串中的特殊字符,即输出看起来应该与输入完全一样。我的代码如下:
open (my $OUT, ">", "out.csv") or die $!;
print $OUT $Body;
但是,当我查看out.csv
时,我看到了:
<p>Here is some text.</p>
<p>Some more text.
相反,我希望看到原始字符串:
<p>Here is some text.</p>
&;#xA;<p>Some more text.
我尝试过以下方法但没有成功:
print $OUT '$Body';
不起作用,只显示“$ Body”print $OUT "$Body";
不起作用,与没有引号相同。 print $OUT qw{$Body};
不起作用,只显示“$ Body”。
这是一个完整的例子:
tmp.xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<node Body="<p>Here is some text.</p>

<p>Some more text."/>
</root>
代码:
#!/usr/bin/perl
use strict;
use XML::Twig;
my $t=XML::Twig->new();
$t->parsefile("tmp.xml");
my $root= $t->root;
open (my $OUT, ">", "out.csv") or die();
my @nodes = $root->children('node'); # get the para children
foreach my $node (@nodes){
my $Body = $node->{'att'}->{'Body'};
print $OUT $Body;
}
结果:
[dev@mogli:/swta] $ ./script.pl
[dev@mogli:/swta] $ cat out.csv
<p>Here is some text.</p>
<p>Some more text.
答案 0 :(得分:8)
XML :: Twig正在进行解码。传递keep_encoding
标志以防止这种情况:
my $t = XML::Twig->new(keep_encoding => 1);
答案 1 :(得分:3)
打印标量不会改变 [1] 。
$ cat a.pl
$Body = '<p>Here is some text.</p>

<p>Some more text.';
open (my $OUT, ">", "out.csv") or die();
print $OUT $Body;
$ perl a.pl
$ cat out.csv
<p>Here is some text.</p>

<p>Some more text.
$Body
不包含您的想法。 XML :: Twig正确返回了节点的内容<p>Here ...
。如果节点包含<p>Here ...
,则XML文件应包含&lt;p&gt;Here ...
。
注意: