2017-12-23 15 views
0

Ich versuche, Stop-Daten aus dem OCTranspo Feed auf einem Dashboard zu Hause zu erhalten. Die OCTranspo API ermöglicht es Ihnen, diese Daten, die ich erfolgreich in PHP ausgeführt habe, zu erhalten.Parse SOAP XML-Feed in PHP

Hier ist eine Kopie der Antwort, dass ich erhalte:

<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
 
    <soap:body> 
 
    <getnexttripsforstopresponse xmlns="http://octranspo.com"> 
 
     <getnexttripsforstopresult> 
 
     <stopno xmlns="http://tempuri.org/">9085</stopno> 
 
     <stoplabel xmlns="http://tempuri.org/">FERNBANK BRIGHTSIDE</stoplabel> 
 
     <error xmlns="http://tempuri.org/"> 
 
      <route xmlns="http://tempuri.org/"> 
 
      <routedirection> 
 
       <routeno>61</routeno> 
 
       <routelabel>Terry Fox</routelabel> 
 
       <direction>Westbound</direction> 
 
       <error> 
 
       <requestprocessingtime>20171222231738</requestprocessingtime> 
 
       <trips> 
 
        <trip> 
 
        <tripdestination>Stittsville</tripdestination> 
 
        <tripstarttime>21:57</tripstarttime> 
 
        <adjustedscheduletime>1</adjustedscheduletime> 
 
        <adjustmentage>0.82</adjustmentage> 
 
        <lasttripofschedule>false</lasttripofschedule> 
 
        <bustype>6LB - 60</bustype> 
 
        <latitude>45.248670</latitude> 
 
        <longitude>-75.912157</longitude> 
 
        <gpsspeed>48.9</gpsspeed> 
 
        </trip> 
 
        <trip> 
 
        <tripdestination>Stittsville</tripdestination> 
 
        <tripstarttime>22:27</tripstarttime> 
 
        <adjustedscheduletime>35</adjustedscheduletime> 
 
        <adjustmentage>0.47</adjustmentage> 
 
        <lasttripofschedule>false</lasttripofschedule> 
 
        <bustype>6EB - 60</bustype> 
 
        <latitude>45.343510</latitude> 
 
        <longitude>-75.820002</longitude> 
 
        <gpsspeed>74.1</gpsspeed> 
 
        </trip> 
 
        <trip> 
 
        <tripdestination>Stittsville</tripdestination> 
 
        <tripstarttime>22:57</tripstarttime> 
 
        <adjustedscheduletime>69</adjustedscheduletime> 
 
        <adjustmentage>0.88</adjustmentage> 
 
        <lasttripofschedule>false</lasttripofschedule> 
 
        <bustype>6EB - 60</bustype> 
 
        <latitude>45.419260</latitude> 
 
        <longitude>-75.656651</longitude> 
 
        <gpsspeed>40.0</gpsspeed> 
 
        </trip> 
 
       </trips> 
 
       </error> 
 
      </routedirection> 
 
      </route> 
 
     </error> 
 
     </getnexttripsforstopresult> 
 
    </getnexttripsforstopresponse> 
 
    </soap:body> 
 
</soap:envelope>

ich diese Antwort in PHP lesen müssen, und es Ausgabe 'Route Label' haben, ‚Route Nummer 'und' Richtung ', sowie jede der' adjustedscheduletime 'für jede der drei Reisen, die aufgeführt sind.

Ich kann die Antwort fein laden, aber ich kann nicht die PHP-Seite, um den XML-Feed zu analysieren.

Hier ist, was ich versucht habe, so weit:

<?php 
 
$mySoapResponse=file_get_contents('https://api.octranspo1.com/v1.2/GetNextTripsForStop?appID={ID}&apiKey={key}&routeNo=61&stopNo=9085'); 
 

 
echo $mySoapResponse; 
 
?> 
 
    <br> 
 
    <hr> 
 
    <br> 
 
    <?php 
 
// Loads the XML 
 
$soap = simplexml_load_string($mySoapResponse); 
 
$soap->registerXPathNamespace('ns1', 'http://raspberrypi.local/'); 
 

 
// Grabs the trips 
 
$trips = $soap->xpath('/ns1:getnexttripsforstopresponse/ns1:getnexttripsforstopresult/ns1:error/ns1:route/ns1:routedirection/ns1:error/ns1:trips'); 
 
$label = $soap->xpath('/ns1:getnexttripsforstopresponse/ns1:getnexttripsforstopresult/ns1:stoplabel'); 
 
echo $label[0]; 
 
//$trips = $xml->children('soap', true)->Body->getnexttripsforstopresponse->getnexttripsforstopresult->error->route->routedirection->error->trips->trip; 
 

 
// Take the posts and generate some markup 
 
foreach ($trips as $trip) 
 
{ 
 

 
     echo ' 
 
       <p>' . $trip->tripstarttime . '</p> 
 
       <p>' . $trip->adjustedscheduletime . '</p> 
 
       <p>' . $trip->bustype . '</p> 
 
     '; 
 
} 
 

 
?>

+0

https://stackoverflow.com/questions/4194489/how-to-parse-soap-xml - Was haben Sie versucht? –

Antwort

0

Ok, ich habe es jetzt schon. Im Grunde genommen habe ich die SOAP-Verarbeitung einfach komplett aufgegeben und in XML konvertiert. Der Post folgte hier: PHP - XML Response into Array für einige Tipps zum XML-Parsen in PHP und voila.

Hier ist meine letzte Code:

<html> 
 

 
<head> 
 
    <link rel="stylesheet" type="text/css" href="stylish.css"> 
 
</head> 
 

 
<body> 
 
    <?php 
 
$mySoapResponse=file_get_contents('https://api.octranspo1.com/v1.2/GetNextTripsForStop?appID={AppID}&apiKey={KEY}$ 
 
$clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:','soap:'], '', $mySoapResponse); 
 
$xml = simplexml_load_string($clean_xml); 
 

 
//print_r($xml); 
 

 

 
// Grabs the trips 
 
$arrTrips = $xml->Body->GetNextTripsForStopResponse->GetNextTripsForStopResult->Route->RouteDirection->Trips->Trip; 
 
//print_r($arrTrips); 
 

 
//Grabs the route info 
 
$routeInfo=$xml->Body->GetNextTripsForStopResponse->GetNextTripsForStopResult->Route->RouteDirection; 
 

 
echo '<H1>Route ' . $routeInfo->RouteNo . ' ' . $routeInfo->RouteLabel . ' ' . $routeInfo->Direction . '</H1>'; 
 
echo '<h2>Next Trips</h2>'; 
 
// Take the posts and generate some markup 
 
$i=1; 
 
foreach ($arrTrips as $trip) 
 
{ 
 

 
     echo '<p> ' . $i . '. Arrives in ' . $trip->AdjustedScheduleTime . ' minutes at ' . $trip->TripStartTime . '</p>'; 
 
     $i=$i+1; 
 
} 
 

 
?> 
 
</body> 
 

 
</html>