0

これは、解析に問題がある XML SOAP 応答の一部です。

<soap:Envelope><soap:Body><getTrainScheduleXMLResponse><getTrainScheduleXMLResult><STATION><STATION_2CHAR>NY</STATION_2CHAR><STATIONNAME>New York Penn Station</STATIONNAME><ITEMS><ITEM><ITEM_INDEX>0</ITEM_INDEX><SCHED_DEP_DATE>18:08:00 06/10/2013</SCHED_DEP_DATE><DESTINATION>MSU</DESTINATION><TRACK>6</TRACK><LINE>MNBTN</LINE><TRAIN_ID>6279</TRAIN_ID><STATUS>ALL ABOARD</STATUS><BACKCOLOR>brown</BACKCOLOR><FORECOLOR>white</FORECOLOR><SHADOWCOLOR>black</SHADOWCOLOR><GPSLATITUDE/><GPSLONGITUDE/><GPSTIME>6/10/2013 5:45:30 PM</GPSTIME><TRAIN_LINE>Montclair-Boonton Line</TRAIN_LINE><STATION_POSITION>0</STATION_POSITION><LINEABBREVIATION>MNBTN</LINEABBREVIATION><INLINEMSG/><STOPS><STOP><NAME>Newark Broad Street</NAME><TIME>6/10/2013 6:25:00 PM</TIME></STOP><STOP><NAME>Watsessing Avenue</NAME><TIME>6/10/2013 6:31:30 PM</TIME></STOP><STOP><NAME>Bloomfield</NAME><TIME>6/10/2013 6:34:00 PM</TIME></STOP><STOP><NAME>Glen Ridge</NAME><TIME>6/10/2013 6:36:30 PM</TIME></STOP><STOP><NAME>Bay Street</NAME><TIME>6/10/2013 6:39:30 PM</TIME></STOP><STOP><NAME>Walnut Street</NAME><TIME>6/10/2013 6:43:00 PM</TIME></STOP><STOP><NAME>Watchung Avenue</NAME><TIME>6/10/2013 6:45:30 PM</TIME></STOP><STOP><NAME>Upper Montclair</NAME><TIME>6/10/2013 6:48:30 PM</TIME></STOP><STOP><NAME>Mountain Avenue</NAME><TIME>6/10/2013 6:51:00 PM</TIME></STOP><STOP><NAME>Montclair Heights</NAME><TIME>6/10/2013 6:53:30 PM</TIME></STOP><STOP><NAME>Montclair State U</NAME><TIME>6/10/2013 6:59:00 PM</TIME></STOP></STOPS></ITEM>

私はこれをやってみました:

$xmlstr = file_get_contents("data.xml");
$xml = new SimpleXMLElement($xmlstr);
var_dump($xml);

しかし、これは次の出力を返します。

object(SimpleXMLElement)#1 (0) {
}

私はそれが空であることを意味しますか?この XML を PHP で解析するにはどうすればよいですか? これは完全なファイルではありません。ありがとう!

4

1 に答える 1

1

理想的には SoapClient クラスで Soap リクエストを消費する必要があるため、これは非常にハックですが、soap 名前空間を削除する場合は、simpleXML を介してリクエストをフィードできるはずです。

$xml = new SimpleXMLElement(str_replace('<soap:','<',$xmlstr));

WSDL が与えられている場合に SOAP サービスを利用するには、次のように簡単です。

$client = new SoapClient('http://www.domain.com/service/soap.wsdl');
$result = $client->someMethodCall($params,$params);
于 2013-06-10T22:45:56.303 に答える