我使用ba.com格式的航班提供市场信息从xml中检索数据:
$url="https://api.ba.com/rest-v1/v1/flightOfferMktAffiliates;departureDateTimeOutbound=".$Fwk->returnTrueDate($_POST['departureDate']).
";locationCodeOriginOutbound=".$_POST['departureMenu'].
";locationCodeDestinationOutbound=".$_POST['destination'].
";departureDateTimeInbound=".$Fwk->returnTrueDate($_POST['returnDate']).
";locationCodeOriginInbound=".$_POST['destination'].
";locationCodeDestinationInbound=".$_POST['departureMenu'].
";cabin=Economy".
";ADT=".$_POST['adults'].
";CHD=".$_POST['children'].
";INF=0".
";format=.xml";
$response = curl_get( $url );
$xml = simplexml_load_string( $response );
我收到这样的消息:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OTA_AirLowFareSearchRS xmlns="http://www.opentravel.org/OTA/2003/05">
<Success xmlns:a="http://www.opentravel.org/OTA/2003/05" xmlns:ns="http://www.ba.com/wsdl/availabilitymanagerv1" xmlns:tns="http://www.ba.com/schema/availabilitymanager/tGetAvailabilityV2"/>
<PricedItineraries>
<PricedItinerary SequenceNumber="1">
<AirItinerary>
<OriginDestinationOptions>
<OriginDestinationOption>
<FlightSegment ArrivalDateTime="2015-05-15T11:05:00" DepartureDateTime="2015-05-15T08:25:00" FlightNumber="117" ResBookDesigCode="O">
<DepartureAirport LocationCode="LHR" Terminal="5"/>
<ArrivalAirport LocationCode="JFK"/>
<OperatingAirline CompanyShortName="British Airways"/>
<Equipment AirEquipType="744"/>
<MarketingAirline Code="BA"/>
<TPA_Extensions>
<CabinInfo CabinCode="M" CabinName="World Traveller"/>
</TPA_Extensions>
</FlightSegment>
</OriginDestinationOption>
<OriginDestinationOption>
<FlightSegment ArrivalDateTime="2015-06-15T19:15:00" DepartureDateTime="2015-06-15T07:15:00" FlightNumber="180" ResBookDesigCode="O">
<DepartureAirport LocationCode="JFK" Terminal="7"/>
<ArrivalAirport LocationCode="LHR"/>
<OperatingAirline CompanyShortName="British Airways"/>
<Equipment AirEquipType="744"/>
<MarketingAirline Code="BA"/>
<TPA_Extensions>
<CabinInfo CabinCode="M" CabinName="World Traveller"/>
</TPA_Extensions>
</FlightSegment>
</OriginDestinationOption>
</OriginDestinationOptions>
</AirItinerary>
...
这就是我理解上述xml时所得到的结果:
foreach($xml->PricedItineraries->PricedItinerary as $item)
{
echo "here";
}
上面的内容返回了大量的“这里”消息,这意味着我可以循环。但是在用$item尝试了各种回显之后,我无法显示任何东西。有人能告诉我,我至少可以如何到达和DepartureAirport,并从它们中读取变量,如ArrivalDateTime和LocationCode。
编辑
开始起作用了。见答案。
发布于 2015-05-04 00:26:27
对于问题中的xml代码,这个嵌套的foreach将创建一个表布局,并将数据从xml中提取到其中。
<table>
<tr>
<td><label>Departure date</label></td>
<td><label>Operator</label></td>
<td><label>Airport</label></td>
<td><label>Terminal</label></td>
<td><label>Flight number</label></td>
<td><label>Return date</label></td>
<td><label>Operator</label></td>
<td><label>Airport</label></td>
<td><label>Terminal</label></td>
<td><label>Flight number</label></td>
<td><label>Cost<label></td>
</tr>
$i=0;
$c=0;
foreach($xml->PricedItineraries->PricedItinerary as $pricedItinerary)
{
echo "<tr>";
foreach($pricedItinerary->AirItinerary->OriginDestinationOptions->OriginDestinationOption as $origin)
{
//each cycle through this foreach fills one half of a given row.
echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->attributes()->DepartureDateTime."</td>";$c++; //Such heresy, much reference
echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->OperatingAirline->attributes()->CompanyShortName."</td>";$c++;
echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->DepartureAirport->attributes()->LocationCode."</td>";$c++;
echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->DepartureAirport->attributes()->Terminal."</td>";$c++;
echo "<td id='cell_".$i.",".$c."'>".$origin->FlightSegment->attributes()->FlightNumber."</td>";$c++;
}
echo "<td id='cell_".$i.",".$c."'>£".$pricedItinerary->AirItineraryPricingInfo->ItinTotalFare->TotalFare->attributes()->Amount."</td>";
$c=0;//reset counter to 0 to avoid generating numbers too large
echo "</tr>";
$i++;
}
在给定的xml中有两个FlightSegment数组,一个包含到目的地的航班,另一个包含返回的航班。要创建包含这两个FlightSegments的一行数据,您需要在第一行中使用OriginDestinationOption作为参数。在它循环两次之后,主前端将进入另一个PricedItinerary (如果您愿意的话,也可以是SequenceNumber )。
$i
和$c
用于为每个生成的单元提供唯一的id。$i
用外部循环迭代,$c
用每个<td>
元素迭代,并在每一行的末尾重置。
https://stackoverflow.com/questions/29998005
复制相似问题