【问题标题】:Parse SOAP XML feed in PHP在 PHP 中解析 SOAP XML 提要
【发布时间】:2017-12-23 04:48:06
【问题描述】:

我正在尝试从 OCTranspo Feed 中获取停止数据,以包含在家里的仪表板上。 OCTranspo API 允许您获取我已在 PHP 中成功运行的这些数据。

这是我收到的回复的副本:

<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>

我需要在 PHP 中读取此响应,并让它输出“路线标签”、“路线编号”和“方向”,以及列出的三个行程中的每个行程的“调整计划时间”。

我可以正常加载响应,但无法让 PHP 页面解析 xml 提要。

这是我迄今为止尝试过的:

<?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>
        ';
}

?>

【问题讨论】:

标签: php soap xml-parsing


【解决方案1】:

好的,我现在知道了。基本上我只是放弃了 SOAP 处理并将其转换为 XML。关注这里的帖子:PHP - XML Response into Array 获取有关 PHP 中 XML 解析的一些技巧,瞧。

这是我的最终代码:

<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>

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多