2016-07-22 16 views
0

ich bin neu bei php und arbeiten an einem projekt, wo ich mit xml api zu tun haben. Ich benutze Laravel 5.2 Framework, um das Projekt zu erstellen.laravel fetch daten von xml api antwort

Ich habe eine xml wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?> 
<HotelListing> 
    <HotelCode Currency="INR">1000000681</HotelCode> 
    <RoomList> 
     <Room> 
      <RoomTypeName>Deluxe Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001713</RoomTypeCode> 
      <IsActive>True</IsActive> 
     </Room> 
     <Room> 
      <RoomTypeName>Den Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001714</RoomTypeCode> 
      <IsActive>True</IsActive> 
     </Room> 
     <Room> 
      <RoomTypeName>Premium Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001715</RoomTypeCode> 
      <IsActive>True</IsActive> 
     </Room> 
     <Room> 
      <RoomTypeName>Couple Package Deluxe Non AC</RoomTypeName> 
      <RoomTypeCode>45000012484</RoomTypeCode> 
      <IsActive>False</IsActive> 
     </Room> 
     <Room> 
      <RoomTypeName>Couple Package for Den AC Room</RoomTypeName> 
      <RoomTypeCode>45000012503</RoomTypeCode> 
      <IsActive>False</IsActive> 
     </Room> 
     <Room> 
      <RoomTypeName>Couple Package for PREMIUM AC </RoomTypeName> 
      <RoomTypeCode>45000012507</RoomTypeCode> 
      <IsActive>False</IsActive> 
     </Room> 
    </RoomList> 
    <RatePlanList> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Deluxe Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001713</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000001857</RatePlanCode> 
      <RatePlanName>APAI</RatePlanName> 
      <MealPlan>FREE Breakfast, Lunch and Dinner</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Deluxe Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001713</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000012282</RatePlanCode> 
      <RatePlanName>CPAI</RatePlanName> 
      <MealPlan>FREE Breakfast</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Deluxe Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001713</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000044053</RatePlanCode> 
      <RatePlanName>MAPAI</RatePlanName> 
      <MealPlan>FREE Breakfast and Dinner</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Den Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001714</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000001858</RatePlanCode> 
      <RatePlanName>APAI</RatePlanName> 
      <MealPlan>FREE Breakfast, Lunch and Dinner</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Den Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001714</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000012283</RatePlanCode> 
      <RatePlanName>CPAI</RatePlanName> 
      <MealPlan>FREE Breakfast</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Den Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001714</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000044054</RatePlanCode> 
      <RatePlanName>MAPAI</RatePlanName> 
      <MealPlan>FREE Breakfast and Dinner</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Premium Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001715</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000001859</RatePlanCode> 
      <RatePlanName>APAI</RatePlanName> 
      <MealPlan>FREE Breakfast, Lunch and Dinner</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Premium Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001715</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000012284</RatePlanCode> 
      <RatePlanName>CPAI</RatePlanName> 
      <MealPlan>FREE Breakfast</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
     <RatePlan IsEditable="True"> 
      <RoomTypeName>Premium Cottage AC</RoomTypeName> 
      <RoomTypeCode>45000001715</RoomTypeCode> 
      <IsActive>True</IsActive> 
      <RatePlanCode>990000044055</RatePlanCode> 
      <RatePlanName>MAPAI </RatePlanName> 
      <MealPlan>FREE Breakfast and Dinner</MealPlan> 
      <LinkedRatePlan IsLinked="False"/> 
     </RatePlan> 
    </RatePlanList> 
</HotelListing> 

und jetzt möchte ich Raum Daten von ihm holen und mein Code, wo $ response XML-Zeichenfolge ist:

private function hotelDetailsResponse($response) 
    { 
     $data = []; 

     $dom = new \DOMDocument(); 
     $dom->formatOutput = TRUE; 
     $dom->preserveWhiteSpace = FALSE; 
     $dom->loadXml($response); 

     $Rooms = $dom->getElementsByTagName("Room"); 
     foreach($Rooms as $Room) { 

      $names = $Room->getElementsByTagName("RoomTypeName"); 
      $data[] = $names->item(0)->nodeValue; 
      $types = $Room->getElementsByTagName("RoomTypeCode"); 
      $data[] = $types->item(0)->nodeValue; 

      } 

      return $data; 
    } 

es gibt mir Array wie folgt aus:

["Deluxe Cottage AC","45000001713","Den Cottage AC","45000001714","Premium Cottage AC","45000001715","Couple Package Deluxe Non AC","45000012484","Couple Package for Den AC Room","45000012503","Couple Package for PREMIUM AC ","45000012507"] 

wo ich das Array wie folgt benötigt:

[{"Name":"Couple Package for PREMIUM AC ","Code":"45000012507"}, {"Name":"Couple Package for PREMIUM AC ","Code":"45000012507"}, {"Name":"Couple Package for PREMIUM AC ","Code":"45000012507"}] 

ich habe auch den Wert in foreach so zu geben versucht:

$Rooms = $dom->getElementsByTagName("Room"); 
foreach($Rooms as $Room) { 

    $names = $Room->getElementsByTagName("RoomTypeName"); 
    $data['name'] = $names->item(0)->nodeValue; 
    $types = $Room->getElementsByTagName("RoomTypeCode"); 
    $data['code'] = $types->item(0)->nodeValue; 

    } 

aber seine gib mir nur letzten Parameter wie unten:

{"name":"Couple Package for PREMIUM AC ","code":"45000012507"} 

freundlicherweise helfen ....

+0

Könnten Sie Ihre Frage zu einem succint Beispiel reduzieren? Ein guter Deal, um große Fragen zu stellen, beinhaltet ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). Es wäre besser für andere Benutzer mit ähnlichen Problemen und erleichtert die Antwort. – ssice

Antwort

0

Sie nehmen den Namen und Typ, und setzen sie beide in das gleiche Array:

$names = $Room->getElementsByTagName("RoomTypeName"); 
$data[] = $names->item(0)->nodeValue; 
$types = $Room->getElementsByTagName("RoomTypeCode"); 
$data[] = $types->item(0)->nodeValue; 

Reduziert, das sieht wie folgt aus:

$data[] = $name; 
$data[] = $type; 

Was Sie brauchen, anstatt zu tun, ist diese als assoziatives Array zum $data Array hinzuzufügen. Hier ist eine deklarative Weise zu tun, dass:

$data[] = [ 
    'Name' => $names->item(0)->nodeValue, 
    'Code' => $types->item(0)->nodeValue 
]; 

Hier ist es in Aktion: https://eval.in/610157

+0

Danke es funktioniert ... –