如何使用Perl将XML数据写入文件?

Nan*_* HE 1 xml perl

您可以在下面更正我的代码吗?

#!/usr/local/bin/perl

open (MYFILE, '>>data.xml');
print MYFILE "<?xml version="1.0" encoding="UTF-8"?>\n";
close (MYFILE); 
Run Code Online (Sandbox Code Playgroud)

更新.

#!/usr/local/bin/perl
open (MYFILE, '>>data.xml');
print MYFILE '<?xml version="1.0" encoding="UTF-8"?\>'."\n";
print MYFILE '<?xml version="1.0" encoding="UTF-16"?\>'."\n";
close (MYFILE);
Run Code Online (Sandbox Code Playgroud)

输出:现在运作良好.

<?xml version="1.0" encoding="UTF-8"?\>
<?xml version="1.0" encoding="UTF-16"?\>
Run Code Online (Sandbox Code Playgroud)

但.

#!/usr/local/bin/perl
open (MYFILE, '>>data.xml');
print MYFILE '<?xml version="1.0" encoding="UTF-8"?\>'.'\n';
print MYFILE '<?xml version="1.0" encoding="UTF-16"?\>'.'\n';
close (MYFILE);
Run Code Online (Sandbox Code Playgroud)

输出:#n错误格式\n

<?xml version="1.0" encoding="UTF-8"?\>\n<?xml version="1.0" encoding="UTF-16"?\>\n
Run Code Online (Sandbox Code Playgroud)

小智 6

问题是你在字符串中有未转义的引号.使用反斜杠转义引号或使用qq {}包围打印字符串:

print MYFILE qq{<?xml version="1.0" encoding="UTF-8"?>\n};
--or--
print MYFILE "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
Run Code Online (Sandbox Code Playgroud)


enn*_*ler 5

print MYFILE qq{<?xml version="1.0" encoding="UTF-8"?>\n};
Run Code Online (Sandbox Code Playgroud)

你的问题是你有嵌套的双引号; 使用qq{}来分隔字符串将解决这个问题.


Eth*_*her 5

始终打开警告和限制,以便您早些时候发现出了什么问题,并获得更多详细信息:

#!/usr/local/bin/perl
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

总是使用lexical-variabled,三参数形式open(这里有一个很大的讨论原因),并且总是检查返回值(如果出现问题,它将返回错误,并将原因列入$!变量中(见下)$!perldoc perlvar).另外,die如果你没有用a结束你的字符串,那么将打印程序退出的行号\n(perldoc -f die更多).

open my $file, '>>', 'data.xml' or die "Can't open file: $!";
Run Code Online (Sandbox Code Playgroud)

并使用双引号,\n以便正确打印:

print $file '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
print $file '<?xml version="1.0" encoding="UTF-16"?>' . "\n";
close $file;
Run Code Online (Sandbox Code Playgroud)