【发布时间】:2013-06-19 22:00:44
【问题描述】:
我需要在 perl 中解析一个 SOAP 响应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:iden="http://identifycaller.customermanagement.schema.amx.com"/>
<soapenv:Body xmlns:iden="http://identifycaller.customermanagement.schema.amx.com">
<ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
<faultcode>ns2:server</faultcode>
<faultstring>Error interno del servicio. Por favor contacte al administrador. </faultstring>
<detail>
<ns2:InternalSystemErrorException xmlns:ns2="http://commonsexceptions.schema.amx.com">
<ns2:errorCode>1049581</ns2:errorCode>
<ns2:errorMsg>Error tecnico</ns2:errorMsg>
<ns2:message>Error interno del servicio. Por favor contacte al administrador.</ns2:message>
</ns2:InternalSystemErrorException>
</detail>
</ns2:Fault>
</soapenv:Body>
</soapenv:Envelope>
我的代码:
my $xml = $response->content;
my $dom = XML::LibXML->load_xml( string => (\$xml) );
my $xpc = XML::LibXML::XPathContext->new($dom);
$xpc->registerNs('ns2', 'http://commonsexceptions.schema.amx.com');
my $errorCode = $xpc->findvalue('/*/ns2:errorCode');
my $errorMessage = $xpc->findvalue('/*/ns2:message');
print "Codigo $errorCode: $errorMessage\n";
我无法获取正确的 XPATH 表达式来获取 ns2:errorCode 和 ns2:message。我已经阅读了很多答案,并将继续玩这个,但时间越来越短了。
我在 windows 下使用 perl 5.16,但计划在 solaris 下部署 perl 5.8.4。我也在使用 XML::LibXML。
【问题讨论】:
-
您不使用 SOAP::Lite 或 XML::Compile::SOAP 是否有原因?他们应该负责为您解析 SOAP 响应。
-
这个答案有帮助吗? stackoverflow.com/questions/7041719/…
-
我尝试了 SOAP::Lite 但无法发送参数(在 WS 上总是收到 null)。所以最后有人与我分享了一个直接请求 LWP::UserAgent 的代码。所以我就这样走了,现在我想解析响应。其他的lib没试过,我去看看
-
@Joel,看看那个答案是我如何得到当前代码的。但我仍然无法获得这些值。
-
@adrianmoya 如果从 XPath 语句中删除“*”会怎样?这给了你什么?
标签: perl xpath xml-libxml