Reputation: 13
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
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
Upvotes: 2
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