1

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>
3
  • did you tried simplexml_load_file? Commented Nov 24, 2015 at 5:05
  • Yes i have tried this too. Commented Nov 24, 2015 at 5:09
  • Possible duplicate of Best XML Parser for PHP Commented Nov 24, 2015 at 5:12

2 Answers 2

2

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
Sign up to request clarification or add additional context in comments.

Comments

0

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

        } 
    } 

2 Comments

@AtulSuroshe , you are welcome , accept and upvote please
You should not read the namespace by its prefix from the document. The prefix is optional and can change anywhere in the document.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.