我目前有一个从Web服务解析数据的脚本,到目前为止我发现的所有例子都告诉我,结果只是被解析为XML,但是如果没有结果实际上是有效的XML,这就有点困难了。
发送到Web服务的XML请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.bring.no/logistics/shippingguide/1.0">
<soapenv:Header/>
<soapenv:Body>
<ns:ShippingGuideRequest>
<ns:UserInformation>
<ns:Usercode>ae34ab27-2023-41f5-b800-013f0d0a6015</ns:Usercode>
</ns:UserInformation>
<ns:ProductIds>
<ns:ProductId>SERVICEPAKKE</ns:ProductId>
</ns:ProductIds>
<ns:Packages>
<ns:Package packageId="7,">
<ns:GrossWeight unitCode="GRM">500</ns:GrossWeight>
<ns:FromPostalCode>4045</ns:FromPostalCode>
<ns:ToPostalCode>4045</ns:ToPostalCode>
</ns:Package>
</ns:Packages>
</ns:ShippingGuideRequest>
</soapenv:Body>
</soapenv:Envelope>
我无法使用SoapClient和更高版本附带的内置PHP5,因为我不赞成强制用户配置这种配置,因为我已经经历了很多测试用例。我尝试使用普通套接字和cURL执行请求,但没有产生任何不同的结果。
我从电话中得到的结果如下;
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns:ShippingGuideResponse xmlns:ns="http://www.bring.no/logistics/shippingguide/1.0"><ns:Packages><ns:Package packageId="7,"><ns:Product><ns:ProductId>SERVICEPAKKE</ns:ProductId><ns:GuiInformation><ns:SortOrder>11</ns:SortOrder><ns:MainDisplayCategory>Hent sendingen selv</ns:MainDisplayCategory><ns:SubDisplayCategory/><ns:DisplayName>På postkontor eller post i butikk</ns:DisplayName><ns:ProductName>Klimanøytral Servicepakke</ns:ProductName><ns:DescriptionText>Madla. Åpningstider Man - Fre: 1000-1800, Lør: 1000-1500</ns:DescriptionText><ns:HelpText>Sendingen er en Klimanøytral Servicepakke som blir levert til mottakers postkontor/ post i butikk. Mottaker kan velge å hente sendingen på et annet postkontor/post i butikk enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Transporttid er normalt 1-3 virkedager, avhengig av strekning. Sendingen kan spores ved hjelp av sporingsnummeret.</ns:HelpText><ns:Tip/></ns:GuiInformation><ns:Price currencyIdentificationCode="NOK"><ns:PackagePriceWithoutAdditionalServices><ns:AmountWithoutVAT>66.00</ns:AmountWithoutVAT><ns:VAT>16.50</ns:VAT><ns:AmountWithVAT>82.50</ns:AmountWithVAT></ns:PackagePriceWithoutAdditionalServices></ns:Price><ns:ExpectedDelivery><ns:WorkingDays>1</ns:WorkingDays><ns:UserMessage/><ns:AlternativeDeliveryDates/></ns:ExpectedDelivery></ns:Product></ns:Package></ns:Packages><ns:TraceMessages><ns:Message>You are using an outdated schema version (1). Most recent schema version is 4.</ns:Message></ns:TraceMessages></ns:ShippingGuideResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
如您所见,XML请求缺少XML标记,因此,SimpleXMLElement和类似的PHP无法解释它。
最后,我用来发送请求的代码,希望它是一些琐碎的东西,比如我丢失或类似的标题。
$ch =curl_init(“http://fraktguide.bring.no/fraktguide/ws/1.0/"”);
curl_setopt($ch,CURLOPT_HTTPHEADER,数组)(‘Content: text/xml;charset=utf-8',’Content:‘)。($xml ));
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_TIMEOUT,30);
curl_setopt($ch,CURLOPT_PORT,80);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$result = curl_exec($ch);
发布于 2011-08-24 04:28:58
数据是被获取的,但是在没有参考点的情况下读取数据似乎是个问题。
解决方案是使用XPath遍历它。
https://stackoverflow.com/questions/7153551
复制