2011-08-22 92 views
1

我目前有一个脚本解析来自Web Service的数据,到目前为止我发现的所有示例都告诉我结果只是被解析为XML,但没有真正有效的结果XML这是有点困难。发送给Web服务SOAP从cURL请求解析到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/”); ('Content-Type:text/xml; charset = utf-8','Content-Length:'。strlen($ 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);

$结果= curl_exec($ CH);

回答

0

数据已被提取,但在没有参考点的情况下读取它似乎是个问题。

该解决方案使用XPath遍历它。