我正在尝试使用Perl创建一个Textfile。我有一个XML文件需要由我的Perl脚本读取。在此之后它必须创建一个Textfile。我在网上搜索了很多但却找不到任何东西。也许你可以在这里支持我。
这是我的Perl脚本:
#!/usr/bin/perl
use XML::Parser;
my $file = 'data.xml';
my $count = '0';
my $parser = new XML::Parser(ErrorContext => 100000000000000000);
$parser->setHandlers(Char => \&char_handler, Default => \&default_handler);
$parser->parsefile($file);
print "Found $count comments.\n";
sub default_handler {
my ($p, $data) = @_;
if ($data =~ /^<!--/) {
my $line = $p->current_line;
$data =~ s/\n/\n\t/g;
print "$line:\t$data\n";
$count++;
}
}
这是我的XML文件:
<?xml version='1.0'?>
< employee>
<name>John Doe</name>
<age>43</age>
<sex>M</sex>
<department>Operations</department>
<city>New York</city>
<name>David Street</name>
<age>25</age>
<sex>M</sex>
<department>Sales</department>
<city>San Diego</city>
< /employee>
当我运行脚本时,我得到以下内容:
>perl print.pl
not well-formed (invalid token) at line 2, column 1, byte 23:
<?xml version='1.0'?>
< employee>
^
<name>John Doe</name>
<age>43</age>
<sex>M</sex>
<department>Operations</department>
<city>New York</city>
<name>David Street</name>
<age>25</age>
<sex>M</sex>
<department>Sales</department>
<city>San Diego</city>
< /employee>
at /opt/GSBperl/lib/site_perl/5.8.8/i86pc-solaris-64int/XML/Parser.pm line 187
这不是我需要的。我需要一个具有这种格式的文件。
John Doe;43;M;Operations
David Street;25;M;Sales
我不需要的领域。
答案 0 :(得分:1)
您的XML无效。确切地说,您的XML“格式不正确”(如错误消息所示)。
问题是< employee>
不是有效的XML标记。您不能在XML元素名称中包含空格 - 因此这应该是<employee>
。
我不知道这个XML文件来自哪里,但它不是XML。你应该去找那个提供这个文件的人,并要求他们在发送之前确保他们的XML格式良好。
(您的示例XML中存在另一个问题 - <!xml ...>
声明之前的第一行中的空格。但是,鉴于您收到的错误消息,我认为这是您在发布问题时所犯的错字此处。)
更新:它不会导致您当前的问题,但如果您修复了XML文件,您可能会要求他们修复多个员工的呈现方式。我期待看到这样的事情:
<?xml version='1.0'?>
<employees>
<employee>
<name>John Doe</name>
<age>43</age>
<sex>M</sex>
<department>Operations</department>
<city>New York</city>
</employee>
<employee>
<name>David Street</name>
<age>25</age>
<sex>M</sex>
<department>Sales</department>
<city>San Diego</city>
</employee>
</employees>
请参阅,我现在每个人都有一个单独的<employee>
元素,并且它们都在新的<employees>
元素下。
总而言之,您的输入文件似乎是由对XML一无所知的人创建的: - )