请您更正下面的代码。
#!/usr/local/bin/perl
open (MYFILE, '>>data.xml');
print MYFILE "<?xml version="1.0" encoding="UTF-8"?>\n";
close (MYFILE);
更新
#!/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);
输出:现在运作良好。
<?xml version="1.0" encoding="UTF-8"?\>
<?xml version="1.0" encoding="UTF-16"?\>
BUT。
#!/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);
输出:#错误格式与\ n
<?xml version="1.0" encoding="UTF-8"?\>\n<?xml version="1.0" encoding="UTF-16"?\>\n
答案 0 :(得分:6)
问题是你在字符串中有未转义的引号。使用反斜杠转义引号或使用qq {}包围打印字符串:
print MYFILE qq{<?xml version="1.0" encoding="UTF-8"?>\n};
--or--
print MYFILE "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
答案 1 :(得分:5)
print MYFILE qq{<?xml version="1.0" encoding="UTF-8"?>\n};
你的问题是你有嵌套的双引号;使用qq{}
来分隔字符串将解决此问题。
答案 2 :(得分:5)
始终启用警告和限制,以便您早些时候发现问题所在,并获取更多详细信息:
#!/usr/local/bin/perl
use strict;
use warnings;
始终使用open
的词法变量,三参数形式(有一个big discussion why over here),并始终检查返回值(如果出现错误,它将返回错误,并将$!
变量(see under $!
at perldoc perlvar)中的原因。另外,如果您没有使用die
结束字符串,\n
将打印程序退出的行号(更多perldoc -f die)。
open my $file, '>>', 'data.xml' or die "Can't open file: $!";
在\n
周围使用双引号,以便正确打印:
print $file '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
print $file '<?xml version="1.0" encoding="UTF-16"?>' . "\n";
close $file;
答案 3 :(得分:3)
我建议使用:
use XML::Simple;
答案 4 :(得分:1)
以下是我打印XML文件的一些代码:
open(XML, ">$xmlfile");
print XML (<<EOF);
<?xml version="1.0" encoding="UTF-8"?>
<gpx
version="1.1"
creator="Navaid Waypoint Generator - http://navaid.com/GPX/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:navaid="http://navaid.com/GPX/NAVAID/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd
http://navaid.com/GPX/NAVAID/1/0 http://navaid.com/GPX/NAVAID/1/0">
<metadata>
<author>
<name>Paul Tomblin</name>
<email id="ptomblin" domain="xcski.com"/>
<link href="http://blog.xcski.com/"/>
</author>
<link href="http://navaid.com/GPX/"/>
</metadata>
EOF
答案 5 :(得分:1)
始终,始终始终检查open
,返回的值,例如,
open (MYFILE, '>>data.xml')
or die "$0: open: $!";
请注意错误消息中的重要位:
$0
open
$!
在传递给die
的字符串末尾没有换行符时,它会附加程序死亡的文件和行号。
答案 6 :(得分:1)
如果要将UTF-8数据写入文件(如您在XML声明中所述,请使用UTF-8编码打开文件:
open my($fh), '>:utf8', 'data.xml' or die "Could not open file: $!";
print $fh qq{<?xml version="1.0" encoding="UTF-8">\n};
答案 7 :(得分:0)
其他几点建议:
用于编写复杂的,结构化的 文件,使用类似的库 XML::Simple或其中一个many, many others available on CPAN。
如果您正在编写许多非常相似的文件,模板模块可能更合适。
重新考虑以太的建议:open
,strict
和warnings
。它将为您节省调试时间。
如果您要声明某个文件具有特定的编码(UTF-8或UTF-16),您可能应该emit actual Unicode text到该文件。 perldoc -f open中有更多信息。