使用Perl读取XML文件并写入文本文件

时间:2017-11-09 09:38:38

标签: xml perl parsing

我正在尝试使用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

我不需要的领域。

1 个答案:

答案 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一无所知的人创建的: - )