【问题标题】:Read an XML File with Perl and write in a Textfile使用 Perl 读取 XML 文件并写入文本文件
【发布时间】:2017-11-09 09:38:38
【问题描述】:

我正在尝试使用 Perl 创建一个文本文件。我有一个需要由我的 Perl 脚本读取的 XML 文件。在此之后它必须创建一个文本文件。我在网上搜索了很多,但找不到任何东西。也许你可以在这里支持我。

这是我的 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

我不需要的字段。

【问题讨论】:

  • 字段“城市”我不需要
  • 您看到的是一条错误消息。它说您的输入文件不是有效的 XML。
  • 如果您没有足够的知识甚至没有机会自己编写程序,那么 Stack Overflow 不是寻求帮助的地方。这不是免费的代码编写服务。通常的方法是聘请知道自己在做什么的人为您完成工作。没有其他职业可以让您尝试在网上乞讨免费工作。
  • 无论如何,您都是从无效的 XML 数据开始的,所以没有人可以帮助您。
  • lib/site_perl/5.8.8 - 帮自己一个忙,尝试使用不到 10 年的 Perl 版本!

标签: xml perl parsing


【解决方案1】:

您的 XML 无效。准确地说,您的 XML “格式不正确”(如错误消息所述)。

问题在于&lt; employee&gt; 不是有效的XML 标记。 XML 元素名称中不能有空格 - 所以这应该是 &lt;employee&gt;

我不知道这个 XML 文件来自哪里,但它不是 XML。您应该去找向您提供此文件的任何人,并要求他们确保他们的 XML 格式正确,然后再发送给您。

(您的示例 XML 中还有另一个问题 - &lt;!xml ...&gt; 声明之前的第一行有空格。但是,鉴于您收到的错误消息,我认为这是您在此处发布问题时犯的错字。 )

更新:这不会导致您当前的问题,但如果您要修复 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>

看,我现在为每个人都有一个单独的&lt;employee&gt; 元素,他们都在一个新的&lt;employees&gt; 元素下。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多