Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 XMLIn解析器错误-过早结束数据问题_Xml_Perl_Xml Parsing_Parse Error - Fatal编程技术网

Perl XMLIn解析器错误-过早结束数据问题

Perl XMLIn解析器错误-过早结束数据问题,xml,perl,xml-parsing,parse-error,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

我对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%理解它。

如果请求未成功,则包含一条错误消息,这是无效的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;
}
使用LWP::UserAgent::determinated qw();
my$browser=LWP::UserAgent::Determined->new;
...
我的$resp=$browser->request($req);
如果($resp->is\u success){
我的$parser=…等等。
}否则{
die sprintf“无法发布到:\n状态%s\n%s\n”
$endpointurl、$resp->status\u line、$resp->content;
}

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请看:我添加了脚本中出错的部分。如果你告诉我你想看剧本,那会更有帮助。我对Perl和XML非常陌生,正如您所知,我在这里的帖子很少。我认为它使用的是XML::LibXML,但可能不是。提供的代码没有让我使用XML::Simple Mod,但我对所有这些都很陌生,也许使用XML::LibXML::Simple只是调用不推荐的脚本的另一种方式?@K.Davis我没有添加解决方案。这只是显示我如何调用mod的更多代码。这是UPS的罐装开发脚本,我没有写,所以他们写的方式可能有问题。我知道错误是什么,这不是问题所在。问题是它试图处理不完整的XML文件,这就是为什么当我再次运行相同的命令时,一切正常。必须有足够的时间完成对文件的写入。这就是我能想到的。好吧,我怀疑HTTP请求缺少错误检查;我已经对上面的答案进行了编辑。好的,这样看起来它会更好地捕捉错误,但是这也会解决脚本在完成XML文件之前试图读取XML文件的问题吗?如果我理解正确,检查$resp->is\u success就是检查它是否都在那里,如果没有,它就会失败。有没有办法让它检查一下,如果它失败了,等着再检查一次,如果第二次失败了,就死定了?似乎是几毫秒的问题导致了这个问题。没有文件,这是一个HTTP响应。你试过密码了吗?如果是,您仍然会遇到解析失败吗?–在
请求
方法完成后,是什么让您认为响应对象发生了变化?要么你误解了你所看到的,要么我们没有完整的画面。请允许我们自己复制错误,猜测是令人厌烦的。完全可以理解!我会试试你的代码,看看它能做些什么,如果它仍然出错,我会让你知道,我会看看我能做些什么,让你所有的部分,尝试重新创建它。谢谢你的帮助!!