2013-03-19 3 views
2

Я искал дни для правильного способа чтения XML, который возвращает API ИБП. Я наконец нашел, как подать петицию за курс из пакета для отправки, и теперь я получил XML с ответом.Чтение ИБП XML с PHP

Я не очень хорошо знаком с XML, но могу понять, как это работает с простыми примерами.

Ответ XML является:

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
    <rate:RateResponse xmlns:rate="http://www.ups.com/XMLSchema/XOLTWS/Rate/v1.1">  
     <common:Response xmlns:common="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0"> 
      <common:ResponseStatus> 
       <common:Code>1</common:Code> 
       <common:Description>Success</common:Description> 
      </common:ResponseStatus> 
      <common:Alert> 
       <common:Code>110971</common:Code> 
       <common:Description>Your invoice may vary from the displayed reference rates</common:Description> 
      </common:Alert> 
      <common:TransactionReference/> 
     </common:Response> 
     <rate:RatedShipment> 
      <rate:Service> 
       <rate:Code>11</rate:Code> 
       <rate:Description/> 
      </rate:Service> 
      <rate:RatedShipmentAlert> 
       <rate:Code>110971</rate:Code> 
       <rate:Description>Your invoice may vary from the displayed reference rates</rate:Description> 
      </rate:RatedShipmentAlert> 
      <rate:BillingWeight> 
       <rate:UnitOfMeasurement> 
        <rate:Code>KGS</rate:Code> 
        <rate:Description>Kilograms</rate:Description> 
       </rate:UnitOfMeasurement> 
       <rate:Weight>3.0</rate:Weight> 
      </rate:BillingWeight> 
      <rate:TransportationCharges> 
       <rate:CurrencyCode>EUR</rate:CurrencyCode> 
       <rate:MonetaryValue>21.85</rate:MonetaryValue> 
      </rate:TransportationCharges> 
      <rate:ServiceOptionsCharges> 
       <rate:CurrencyCode>EUR</rate:CurrencyCode> 
       <rate:MonetaryValue>1.40</rate:MonetaryValue> 
      </rate:ServiceOptionsCharges> 
      <rate:TotalCharges> 
       <rate:CurrencyCode>EUR</rate:CurrencyCode> 
       <rate:MonetaryValue>23.25</rate:MonetaryValue> 
      </rate:TotalCharges> 
      <rate:RatedPackage> 
       <rate:Weight>1.0</rate:Weight> 
      </rate:RatedPackage> 
      <rate:RatedPackage> 
       <rate:Weight>2.0</rate:Weight> 
      </rate:RatedPackage> 
     </rate:RatedShipment> 
</rate:RateResponse>  
</soapenv:Body> 
</soapenv:Envelope> 

Я попытался примером, чтобы получить значение с simplexml_load_file(); и я мог бы получить значения из тега (очень простой пример). Но когда я пытаюсь сделать это с этим, я ничего не могу получить, потому что он говорит ошибку beign, а не тип объекта.

Буду очень благодарен, если кто-то знает, как читать этот XML и научить меня, как это сделать.

Спасибо за ваше время, читая это!

PS: Когда я попытался простой пример, я попробовал это и работал:

$school = simplexml_load_file('XOLTResult.xml'); //where is the xml 
echo $school->students->student[0]; //finding the first student nam 

Это работало правильно, но когда я пытаюсь получить, например, response-> RatedShipment [0] -> Сервис-> Код; */, чтобы получить первый номер/*, появится ошибка.

+1

Можете ли вы опубликовать [код] (http://sscce.org/)? – phihag

+0

Я добавил в конце php, который я использовал для примера, который работал, и попробовал почти то же самое для моего ИБП XML – Ardilla

ответ

4

Почему бы вам не попробовать интерфейс SoapClient?

$client = new SoapClient('http://host/api/soap/?wsdl'); 

// If somestuff requires api authentification, 
// then get a session token 
$session = $client->login('apiUser', 'apiKey'); 

http://php.net/manual/en/class.soapclient.php

+0

благодаря помощнику, который мы наконец получили (я думаю), что нам было нужно благодаря вам. в конце создания XML есть часть кода, который использует метод soapCall, и благодаря этому нам было необходимо. – Ardilla

+0

Добро пожаловать. Я знаю, как это разочаровывает это ;-) Я пытаюсь понять пурпурное мыло ... * ужас *. Глас, я мог бы помочь. – Tschallacka