Atul Suroshe
Atul Suroshe

Reputation: 13

How to Parse xml data using php

I am using travelyari api from which i am getting the deta as below. In this i want to get city names seperated. I have tried many solutions but didnt get success.Please anyone help me.

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

Upvotes: 1

Views: 80

Answers (2)

Pradeep Sanjaya
Pradeep Sanjaya

Reputation: 1846

You can use SimpleXMLElement with xpath. //a:FromCityName|//a:ToCityName will query FromCityName or ToCityName.

Code

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

Result

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

Reference

  1. xpath
  2. registernamespace

Upvotes: 2

Afsar
Afsar

Reputation: 3124

You can use Namespace module of php xml to access nodes:

    $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>";

        } 
    } 

Upvotes: 0

Related Questions