Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Perl读取XML文件并写入文本文件_Xml_Perl_Parsing - Fatal编程技术网

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

用Perl读取XML文件并写入文本文件,xml,perl,parsing,Xml,Perl,Parsing,我试图用Perl创建一个文本文件。我有一个XML文件,需要由Perl脚本读取。在这之后,它必须创建一个文本文件。我在网上搜索了很多,但什么也没找到。也许你可以在这里支持我 这是我的Perl脚本: #!/usr/bin/perl use XML::Parser; my $file = 'data.xml'; my $count = '0'; my $parser = new XML::Parser(ErrorContext => 100000000000000000); $parser

我试图用Perl创建一个文本文件。我有一个XML文件,需要由Perl脚本读取。在这之后,它必须创建一个文本文件。我在网上搜索了很多,但什么也没找到。也许你可以在这里支持我

这是我的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“格式不好”(正如错误消息所说)

问题是
不是有效的XML标记。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>

无名氏
43
M
操作
纽约
大卫街
25
M
销售额
圣地亚哥
看,我现在为每个人都有一个单独的
元素,它们都在一个新的
元素下


总之,您的输入文件似乎是由对XML一无所知的人创建的:-)

字段“city”我不需要您看到的是一条错误消息。它说你的输入文件不是有效的XML。如果你知道的不够多,甚至连自己编写程序的机会都没有,那么堆栈溢出就不是寻求帮助的地方。这不是免费的代码编写服务。通常的方法是雇佣一个知道自己在做什么的人为你做这项工作。在任何职业中,你都不会试图在网上乞讨免费工作。无论如何,你是从无效的XML数据开始的,因此没有人能帮助你。
lib/site\u perl/5.8.8
-帮你自己一个忙,尝试使用一个不超过十年的perl版本!
>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
<?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>