2015-11-24 144 views
1

我正在使用travelyari api從中得到如下所示的附件。在這我想分開的城市名稱。我已經嘗試了很多解決方案,但沒有取得成功。請任何人幫助我。如何使用php解析xml數據

<APIGetCitiesResponse xmlns="http://tempuri.org/"> 
<APIGetCitiesResult xmlns:a="http://schemas.datacontract.org/2004/07/CRS2011AgentApi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>311</a:ToCityID> 
<a:ToCityName>Chiplun</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>2432</a:ToCityID> 
<a:ToCityName>Dhartale</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>2431</a:ToCityID> 
<a:ToCityName>Gaonkhadi</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>519</a:ToCityID> 
<a:ToCityName>Khed</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>11</a:ToCityID> 
<a:ToCityName>Mumbai</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>2429</a:ToCityID> 
<a:ToCityName>Pawas</a:ToCityName> 
</a:CityPair> 
+0

做你試過'simplexml_load_file'? – Afsar

+0

是的,我也試過這個。 –

+0

可能的重複[最佳XML解析器的PHP](http://stackoverflow.com/questions/188414/best-xml-parser-for-php) – astroanu

回答

0

您可以使用Namespace模塊PHP的XML的訪問節點:

$xmlString = file_get_contents("yourXMLFileName.xml"); 
    $xml = new SimpleXMLElement($xmlString); 

    foreach ($xml as $out_namespace) 
    { 
     $ns = $out_namespace->getNamespaces(true); 
     $child = $out_namespace->children($ns['a']); 
     foreach ($child as $out) 
     { 
      echo "From City name: ". $out->FromCityName ." To city name : ".$out->ToCityName."</br>"; 

     } 
    } 
+0

謝謝zan ..它的工作。 –

+0

@AtulSuroshe,歡迎您,接受並請注意 – Afsar

+0

您不應該從文檔中通過其前綴讀取命名空間。前綴是可選的,並且可以在文檔中的任何地方更改。 – ThW

2

您可以在xpath中使用SimpleXMLElement//a:FromCityName|//a:ToCityName將詢問FromCityNameToCityName

代碼

<?php 
$xmlString ='<APIGetCitiesResponse xmlns="http://tempuri.org/"> 
<APIGetCitiesResult xmlns:a="http://schemas.datacontract.org/2004/07/CRS2011AgentApi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>311</a:ToCityID> 
<a:ToCityName>Chiplun</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>2432</a:ToCityID> 
<a:ToCityName>Dhartale</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>2431</a:ToCityID> 
<a:ToCityName>Gaonkhadi</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>519</a:ToCityID> 
<a:ToCityName>Khed</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>11</a:ToCityID> 
<a:ToCityName>Mumbai</a:ToCityName> 
</a:CityPair> 
<a:CityPair> 
<a:FromCityID>2433</a:FromCityID> 
<a:FromCityName>Adivare</a:FromCityName> 
<a:ToCityID>2429</a:ToCityID> 
<a:ToCityName>Pawas</a:ToCityName> 
</a:CityPair> 
</APIGetCitiesResult> 
</APIGetCitiesResponse>'; 

$xml = new SimpleXMLElement($xmlString); 
$xml->registerXPathNamespace('a', 'http://schemas.datacontract.org/2004/07/CRS2011AgentApi'); 
$results = $xml->xpath('//a:FromCityName|//a:ToCityName'); 

foreach ($results as $result) { 
    echo $result . "\n"; 
} 
?> 

結果

Adivare 
Chiplun 
Adivare 
Dhartale 
Adivare 
Gaonkhadi 
Adivare 
Khed 
Adivare 
Mumbai 
Adivare 
Pawas 

參考

  1. xpath
  2. registernamespace