Извлечение некоторых элементов XML с помощью PHP SimpleXML - PullRequest
0 голосов
/ 20 апреля 2010

У меня возникли проблемы с анализом этого фрагмента XML с использованием SimpleXML. Всегда есть только один элемент Series и переменное количество элементов Episode. Я хочу проанализировать XML, чтобы можно было хранить данные Серии в одной таблице, а все данные Эпизода - в другой таблице.

XML:

<Data>
    <Series>
        <id>80348</id>
        <Genre>|Action and Adventure|Comedy|Drama|</Genre>
        <IMDB_ID>tt0934814</IMDB_ID>
        <SeriesID>68724</SeriesID>
        <SeriesName>Chuck</SeriesName>
        <banner>graphical/80348-g.jpg</banner>
    </Series>
    <Episode>
        <id>935481</id>
        <Director>Robert Duncan McNeill</Director>
        <EpisodeName>Chuck Versus the Third Dimension 2D</EpisodeName>
        <EpisodeNumber>1</EpisodeNumber>
        <seasonid>27984</seasonid>
        <seriesid>80348</seriesid>
    </Episode>
    <Episode>
        <id>935483</id>
        <Director>Robert Duncan McNeill</Director>
        <EpisodeName>Buy More #15: Employee Health</EpisodeName>
        <EpisodeNumber>2</EpisodeNumber>
        <seasonid>27984</seasonid>
        <seriesid>80348</seriesid>
    </Episode>
</Data>

Когда я пытаюсь получить доступ только к первому элементу Series и дочерним узлам или перебираю только элементы Episode, это не работает. Я также пытался использовать DOMDocument с SimpleXML, но не смог заставить его работать вообще.

Код PHP:

<?php
    if(file_exists('en.xml'))
    {
        $data = simplexml_load_file('en.xml');
        foreach($data as $series)
        {
            echo 'id: <br />' . $series->id;
            echo 'imdb: <br />' . $series->IMDB_ID;
        }
    }
?>

Выход:

id:80348
imdb:tt0934814
id:935481
imdb:
id:1534641
imdb:

1 Ответ

0 голосов
/ 20 апреля 2010

Я только что обнаружил глупую ошибку, которую я совершил.

PHP-код должен был выглядеть следующим образом:

<?php
    if(file_exists('en.xml'))
    {
        $data = simplexml_load_file('en.xml');
        foreach($data->Series as $series)
        {
            echo 'id: <br />' . $series->id;
            echo 'imdb: <br />' . $series->IMDB_ID;
        }
    }
?>

Первый раз, когда я попробовал это (и это не сработало), я использовал;

$data->series as $series

Значит, проблема была в заглавной букве "S".

...