Получить значение элемента XML

Рейтинг: 0Ответов: 1Опубликовано: 20.03.2015

Здравствуйте. Пытался сам разобраться, да чего-то у меня не выходит.

В общем, дело следующее. С чужого сервера в ответ на мои запросы приходит XML - PASTEBIN

Пытаюсь получить доступ к элементам <achiev id = 1>INT</achiev> и к элементам блока <playerTalents>.

Пробовал через SimpleXML, строго действуя документации:

<?php
$xml = file_get_contents($url);

$stat = new SimpleXMLElement($xml);

foreach ($stat->data->user->id as $id {
    switch((string) $achieve['id']) { // Получение атрибутов элемента по индексу
    case '1':
        $dmg = $id;
        break;

    }
}
?>

Но чего-то ерунда какая-то получается, постоянно возвращается 0.

Так вот, вопрос, как мне все-таки подобраться к нужному мне элементу?

Ответы

▲ 2Принят

Предложу такой вариант (преобразование данных в массив):

function objectsIntoArray($arrObjData, $arrSkipIndices = array())
 {
     $arrData = array();
     // if input is object, convert into array
     if (is_object($arrObjData)) {
         $arrObjData = get_object_vars($arrObjData);
     }

     if (is_array($arrObjData)) {
         foreach ($arrObjData as $index => $value) {
             if (is_object($value) || is_array($value)) {
                 $value = objectsIntoArray($value, $arrSkipIndices); // recursive call
             }
             if (in_array($index, $arrSkipIndices)) {
                 continue;
             }
             $arrData[$index] = $value;
         }
     }
     return $arrData;
 }

$xmlStr = file_get_contents($xmlUrl);     //получили данные
$xmlObj = simplexml_load_string($xmlStr); //распарсили
$arrXml = objectsIntoArray($xmlObj);      //преобразовали в массив

$arrXml['data']['user']['collections'][0] - доступ к данным.

Вообще, если непонятно, как в данный момент хранятся данные, выведите их с помощью print_r() или var_dump(). Это даст возможность посмотреть, какие индексы использует в текущий момент конкретный массив, и как его лучше вывести.