Perl XMLIn Parser Error - 过早结束数据问题

时间:2018-02-28 20:56:13

标签: xml perl xml-parsing parse-error

我是Perl和XML的新手,所以请耐心等待我。

我的XMLIn随机地不喜欢返回的XML文件,即使我打开两个不同的XML返回文件它们是相同的。

我提出了这个解决方案:

#Send HTTP Request
my $browser = LWP::UserAgent->new();   
my $req = HTTP::Request->new(POST => $endpointurl);
$req->content("@XML");

#Get HTTP Response Status
my $resp = $browser->request($req);

#Get Response Status
my $parser = XML::LibXML::Simple->new();
my $xmlResp = ();
$xmlResp = eval { $parser->XMLin($resp->content()) };
unless ($xmlResp)
{
    $xmlResp = eval { $parser->XMLin($resp->content()) };
}

但是我不确定这是不是“好的做法”,或者如果失败的话,还有什么更好的办法让它循环回来呢。

这似乎有效,但我知道这并不能使它“正确”。

***这部分代码是由UPS提供的,我没有写,我也不是100%理解它。

1 个答案:

答案 0 :(得分:1)

如果请求不成功,则

$resp->content包含错误消息,该消息不是有效的XML。如果程序是永久性错误,程序应该停止,如果是暂时性错误则重试,并且仅在成功时解析内容。

use LWP::UserAgent::Determined qw();
my $browser = LWP::UserAgent::Determined->new;
...
my $resp = $browser->request($req);
if ($resp->is_success) {
    my $parser = ... etc. etc.
} else {
    die sprintf "could not POST to <%s>:\nStatus %s\n%s\n"
        $endpointurl, $resp->status_line, $resp->content;
}