Достать значение из SimpleXMLElement Object для JSON'a

Статус
В этой теме нельзя размещать новые ответы.

Albert22

Старатель
Регистрация
30 Мар 2008
Сообщения
270
Реакции
11
Всем привет
Имеется вот такого рода XML-файл:
Код:
<track>
    <id>3189830</id>
    <name>Empty Sky</name>
    <duration>509000</duration>
    <artist>
        <name>Elton John</name>
    </artist>
        <album position="1">
        <artist>Elton John</artist>
        <title>Empty Sky</title>
        <mbid>22f9fe0b-9455-4816-9849-d50c0b5f1b09</mbid>
        <url>/music/Elton+John/Empty+Sky</url>                    
    </album>
</track>
Обрабатывается следующим образом:
Код:
$xml = @simplexml_load_file($file);
$return=array(
'status'=>1,
...
'album_title'=>$xml->track[0]->album[0]->title,
'album_url'=>$xml->track[0]->album[0]->url
);
echo json_encode($return);
И в результате выдаётся вот такой JSON:
Код:
{"status":1,...,"album_title":{"0":"Empty Sky"},"album_url":{"0":"\/music\/Elton+John\/Empty+Sky"}}
Однако, в результате вставки на страницу информации из album_url и album_title отображается
Подскажите, что где изменить или как вытаскивать чтобы получить строку? Пробовал комбинировать, менять — не получилось, нужно знать конкретно.
 
прежде всего можно print_r($xml) и посмотреть структуру отпарсенного файла.
Однако, в результате вставки на страницу информации из album_url и album_title отображается
Это означает, что ты передаёшь на печать объект.

Есть готовые решения для конвертации
 
PHP:
<?php
$string = '<track>
  <id>3189830</id>
  <name>Empty Sky</name>
  <duration>509000</duration>
  <artist>
    <name>Elton John</name>
  </artist>
  <album position="1">
    <artist>Elton John</artist>
    <title>Empty Sky</title>
    <mbid>22f9fe0b-9455-4816-9849-d50c0b5f1b09</mbid>
    <url>/music/Elton+John/Empty+Sky</url>
  </album>
</track>';
$xml = simplexml_load_string($string);
echo '<pre>'; print_r($xml); echo '</pre>';
$return = array(
  'status' => $xml->album['position'],
  'album_title' => $xml->album->title,
  'album_url'=>$xml->album->url
);
echo '<pre>'; print_r(json_encode($return));
?>
В результате
Код:
{"status":{"0":"1"},"album_title":{"0":"Empty Sky"},"album_url":{"0":"\/music\/Elton+John\/Empty+Sky"}}
 
прежде всего можно print_r($xml) и посмотреть структуру отпарсенного файла.
И не раз. Толку...)
Код:
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [status] => ok
        )

    [track] => SimpleXMLElement Object
        (
            [id] => 1085741
            [name] => Pinball Wizard
            [mbid] => SimpleXMLElement Object
                (
                )

            [url] => http://www.last.fm/music/Elton+John/_/Pinball+Wizard
            [duration] => 311000
            [streamable] => 1
            
[listeners] => 21194
            [playcount] => 57687
            [artist] => SimpleXMLElement Object
                (
                    [name] => Elton John
                    [mbid] => b83bc61f-8451-4a5d-8b8e-7e9ed295e822
                    [url] => http://www.last.fm/music/Elton+John
                )

            [album] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [position] => 11
                        )

                    [artist] => Elton John
                    [title] => Caribou
                    [mbid] => a9577e29-26c8-4ce5-965f-0b41195aec07
                    [url] => http://www.last.fm/music/Elton+John/Caribou
                    [image] => Array
                        (
                            [0] => http://userserve-ak.last.fm/serve/64s/8729221.jpg
                            [1] => http://userserve-ak.last.fm/serve/126/8729221.jpg
                            [2] => http://userserve-ak.last.fm/serve/174s/8729221.jpg
                            [3] => http://userserve-ak.last.fm/serve/300x300/8729221.jpg
                        )

                )

            [toptags] => SimpleXMLElement Object
                (
                    [tag] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [name] => rock
                                    [url] => http://www.last.fm/tag/rock
                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [name] => classic rock
                                    [url] => http://www.last.fm/tag/classic%20rock
                                )

                            [2] => SimpleXMLElement Object
                                (
                                    [name] => elton john
                                    [url] => http://www.last.fm/tag/elton%20john
                                )

                            [3] => SimpleXMLElement Object
                                (
                                    [name] => 70s
                                    [url] => http://www.last.fm/tag/70s
                                )

                            [4] => SimpleXMLElement Object
                                (
                                    [name] => cover
                                    [url] => http://www.last.fm/tag/cover
                                )

                        )

                )

        )

)

Добавлено через 15 минут

В результате
Код:
... "album_url":{"0":"\/music\/Elton+John\/Empty+Sky"
Спасибо, конечно, однако этот результат у меня и так есть. А требуется
Код:
"album_url":"\/music\/Elton+John\/Empty+Sky"
То есть только строка, а не вложенный объект, массив или ещё чё-то.
Ибо после вставки яваскриптом получаю Object, undefined и иже с ними. Манипуляции и комбинирование вслепую не помогают.

Добавлено через 37 минут
Можно подойти с другой стороны:
3de65be70dd7.png

Это скриншот того ХМЛ файла.
Есть тег <image size="large">. Его содержимое достаётся через $xml->track[0]->album[0]->image[2]. Однако, <image size="extralarge"> через $xml->track[0]->album[0]->image[3], хоть он и схож, получить нельзя. Он, равно как и <url> самовложенный какой-то. Как достать то, что в нём? Если получается — тогда все прежние вопросы отпадают...
 
Спасибо, конечно, однако этот результат у меня и так есть. А требуется
Код:
"album_url":"\/music\/Elton+John\/Empty+Sky"
То есть только строка, а не вложенный объект, массив или ещё чё-то.
Ибо после вставки яваскриптом получаю Object, undefined и иже с ними. Манипуляции и комбинирование вслепую не помогают.
попробуй указать тип данных
'album_url'=>(string)$xml->track[0]->album[0]->url
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху