2016-01-21 2 views
1

Я работаю с веб-сервисами. Я отправляю запрос и получаю xml в качестве ответа. Это то, что я посылаю:print value from XML reply

$s = new soapclient($conDetails['url'],array('wsdl')); 
$params = new stdClass; 
$paramsStr = ' 
      <GetPackItinerary UserID="'.$conDetails['UsrId'].'" SessionID="'.$conDetails['Session'].'" > 
       <root> 
        <ItinId>'.$_GET['int'].'</ItinId> 
       </root> 
      </GetPackItinerary> 
      '; 
$params->xmlRequest = $paramsStr; 

$result = $s->__call("SubmitXmlString",array($params)); 

если я печатаю мой resualt его выглядеть:

<GetPackItinerary Cnt="1"> 
    <int id="39"> 
     <header> 
      <ItinId>39</ItinId> 
      <Name>text for tour</Name> 
      <Class>STD</Class> 
      <Days>10</Days> 
      <Text/> 
      <Include>text for tour</Include> 
      <NotInclude>text for tour</NotInclude> 
      <Url>http://www.geotours.co.il</Url> 
      <Status>OK</Status> 
     </header> 
     <day id="1"> 
      <ItinId>39</ItinId> 
      <Destination/> 
      <Day>1</Day> 
      <Meal/> 
      <Header>text for day 1</Header> 
      <Text>some text</Text> 
      <Include>some text</Include> 
      <NotInclude/> 
     </day> 
     <day id="2"> 
      <ItinId>39</ItinId> 
      <Destination/> 
      <Day>2</Day> 
      <Meal/> 
      <Header>text for day 2</Header> 
      <Text>some text 2</Text> 
      <Include>some text 2</Include> 
      <NotInclude/> 
     </day> 
    </int> 
</GetPackItinerary> 

Мой вопрос - что именно я могу получить обратно от WS? это XML? obeject? и - как мне напечатать какое-то значение, для момента - тег «name» в теге «header» (текст для тура)?

+0

Похоже, XML, и вы должны будете использовать '' DOMDocument' или SimpleXML' с ответом – RamRaider

+0

, что дает Вам этот код: 'эхо GetType ($ результат);'? – RomanPerekhrest

+0

@RomanPrekhrest - слово «объект» – roi

ответ

0

Мне кажется, «XML». Вы можете использовать SimpleXML для доступа к элементам XML. Вот так: -

<?php 
//generate a file from **$result** and store it in your directory. 
//save it as myfile.xml, which would be handled by simplexml_load_file 
$fileHandler = simplexml_load_file("myfile.xml"); 
echo $fileHandler->GetPackItinerary->int->header->Name; 

//outputs :- text for tour 
?> 
+0

Нужно ли мне сохранять его в файле? – roi

+0

@roi, да, это предпочтительнее. – Akshay

0

Использование стандартного DOMDocument довольно легко перемещаться по различным узлам, как только вы undersand некоторых основ, но следующие должен дать вам общее представление.

$strxml='<GetPackItinerary Cnt="1"> 
      <int id="39"> 
       <header> 
        <ItinId>39</ItinId> 
        <Name>text for tour</Name> 
        <Class>STD</Class> 
        <Days>10</Days> 
        <Text/> 
        <Include>text for tour</Include> 
        <NotInclude>text for tour</NotInclude> 
        <Url>http://www.geotours.co.il</Url> 
        <Status>OK</Status> 
       </header> 
       <day id="1"> 
        <ItinId>39</ItinId> 
        <Destination/> 
        <Day>1</Day> 
        <Meal/> 
        <Header>text for day 1</Header> 
        <Text>some text</Text> 
        <Include>some text</Include> 
        <NotInclude/> 
       </day> 
       <day id="2"> 
        <ItinId>39</ItinId> 
        <Destination/> 
        <Day>2</Day> 
        <Meal/> 
        <Header>text for day 2</Header> 
        <Text>some text 2</Text> 
        <Include>some text 2</Include> 
        <NotInclude/> 
       </day> 
      </int> 
     </GetPackItinerary>'; 

$dom=new DOMDocument; 
$dom->loadXML($strxml); 

$root=$dom->getElementsByTagName('GetPackItinerary')->item(0); 
$header=$dom->getElementsByTagName('header')->item(0); 
$days=$dom->getElementsByTagName('day'); 

$tour=$header->childNodes->item(3); 

echo $tour->tagName.': '.$tour->nodeValue.BR;/* Name: text for tour */ 

foreach($days as $node){/* 1,3,5,7,9 etc ~ even numbers are textNodes! */ 
    echo $node->childNodes->item(9)->tagName.': '.$node->childNodes->item(9)->nodeValue.BR; 
}