Как разобрать данные XML с помощью php

1

Я использую travelyari api, из которого я получаю deta, как показано ниже. В этом я хочу разделить названия городов. Я пробовал много решений, но не получил успеха. Пожалуйста, помогите мне.

<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 ?
  • 0
    Да, я тоже это попробовал.
Показать ещё 1 комментарий
Теги:

2 ответа

0
Лучший ответ

Вы можете использовать модуль пространства имен 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
    Спасибо, Зан .. это сработало.
  • 0
    @AtulSuroshe, пожалуйста, примите и подтвердите, пожалуйста
Показать ещё 2 комментария
2

Вы можете использовать SimpleXMLElement с xpath. //a:FromCityName|//a:ToCityName будет запрашивать FromCityName или ToCityName.

Код

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню