Фильтрация XML-файла по идентификатору - PullRequest
0 голосов
/ 04 марта 2019

Здравствуйте, у меня возникла проблема, когда я пытаюсь проанализировать файл XML

Я пытаюсь отобразить только один контент песни, используя идентификатор, например

mysongs.php? Id = 0 Этодолжен показать песню "Я оставил свое сердце на Европе"

, и если mysongs.php? id = 1

Предполагается, что будет показана песня "О Ганимед"

Я хочуиспользовать номер вместо номера песни Моя проблема в том, что я использую [$id] вместо номера [0] не работает

echo $mysongs->song[$id]->title;

Пожалуйста, как мне решить мою проблему

Это мой XML файл с содержанием songs.xml

<album>
    <song dateplayed="2011-07-24 19:40:26">
        <title>I left my heart on Europa</title>
        <artist>Ship of Nomads</artist>
    </song>
    <song dateplayed="2011-07-24 19:27:42">
        <title>Oh Ganymede</title>
        <artist>Beefachanga</artist>
    </song>
  </album>

Мой код PHP ниже

<?php
$id = $_GET['id'];
$mysongs = simplexml_load_file('songs.xml');
echo $mysongs->song[0]->title;
?>

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вам нужно будет установить идентификатор как часть параметра столбца в XML-файлах

Попробуйте код ниже

<album>
    <song dateplayed="2011-07-24 19:40:26">
         <id>1</id>
        <title>I left my heart on Europa</title>
        <artist>Ship of Nomads</artist>
    </song>
    <song dateplayed="2011-07-24 19:27:42">
        <id>2</id>
        <title>Oh Ganymede</title>
        <artist>Beefachanga</artist>
    </song>
  </album>

Результат можно получить двумя способами ниже

1.) Использование метода прямых элементов

В следующем примере показано получение значения узла элемента and в первом и втором элементах файла ".xml":

<?php
$id = $_GET['id'];
$mysongs = simplexml_load_file('songs.xml')or die("Error: Cannot create object");
//get the first record
echo $mysongs->song[0]->id;
echo $mysongs->song[0]->title;

//get the second record
echo $mysongs->song[1]->id;
echo $mysongs->song[1]->title;
?>

2.) С использованием метода зацикливания элементов

 <?php
$mysongs=simplexml_load_file("songs.xml") or die("Error: Cannot create object");
foreach($mysongs->children() as $song_album) {
    echo $song_album->id . ", ";
    echo $song_album->title . ", ";
    echo $song_album->artist . "<br>";
}
?> 
0 голосов
/ 04 марта 2019

Это, вероятно, проблема типа.

Попробуйте повторить тип вашего идентификатора, если только вы не проанализируете его где-нибудь, это будет строка:

<?php
$id = $_GET['id'];
echo gettype($id);

Затем, когда вы делаете $mysongs->song[$id], это не эквивалентно $mysongs->song[0], но $mysongs->song['0'], что не совпадает с индексом.

Итак, чтобы получить ожидаемый результат, вы должны привести его к int, прежде чем использовать его в качестве индекса.Для этого вы можете использовать приведение ($id = (int) $_GET['id'];) или, если оно недоступно в вашей версии PHP intval ($id = intval($_GET['id']);

) Тогда конечный результат будет выглядеть следующим образом...

<?php
$id = (int) $_GET['id'];
$mysongs = simplexml_load_file('songs.xml');
echo $mysongs->song[$id]->title;
...