Как сбросить элементы xml в php? - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над кодом php, как показано ниже, в котором я хочу, чтобы unset xml элементы в php.

Я применил логику следующим образом:

Когда $ a равно 4, тогда должно отображаться 4-й элемент сверху из xml.
Когда $ a равен 3, тогда он должен отображать третий элемент сверху из xml.
Когда $ a равно 2, тогда он должен отображать 2-й элемент сверху из xml.
Когда $ a равен 1., тогда он должен отображать 1-й элемент сверху из xml.

На данный момент я установил значение a в 4.

$a=4;
if ($a == 1) {  // it would not unset item[0] and it should display item[0]   (April 5)
for($i = count($xml->channel->item); $i >= 1; $i--){
unset($xml->channel->item[$i]);                     
}
} else if ($a == 2) { // it would not unset item[1]  and it should display item[1] (April 4)
for($i = count($xml->channel->item); $i >= 2; $i--){
unset($xml->channel->item[$i]);
}
unset($xml->channel->item[0]);                 
} else if ($a == 3) { // it would not unset item[2] and it should display item[2]  (April 3)
for($i = count($xml->channel->item); $i >= 3; $i--){
unset($xml->channel->item[$i]);
}
unset($xml->channel->item[0]);
unset($xml->channel->item[1]);
} else if ($a == 4) { // it would not unset item[3] and it should display item[3]  (April 2)
for($i = count($xml->channel->item); $i >= 4; $i--){
unset($xml->channel->item[$i]);
}
unset($xml->channel->item[0]);
unset($xml->channel->item[1]);
unset($xml->channel->item[2]);
} else if ($a == 5) {  // it would not unset item[4] and it should display item[4]   (April 1)
unset($xml->channel->item[0]);
unset($xml->channel->item[1]);
unset($xml->channel->item[2]);
unset($xml->channel->item[3]);
}

Приведенный выше код работает неправильно.Весь контент извлекается из этого xml http://www.cpac.ca/tip-podcast/jwplayer.xml

Я прикрепил скриншот со списком предметов.

enter image description here

1 Ответ

3 голосов
/ 06 апреля 2019

Если вы хотите отобразить информацию из определенного элемента, вы можете просто получить к ней доступ непосредственно по его индексу, не удаляя другие записи.Этот код будет работать с XML, загруженным с URL-адреса в вашем вопросе.Обратите внимание, что массивы элементов xml имеют индекс 0, поэтому значение 2 получит третью запись в массиве, поэтому мы используем $a-1, чтобы значение 3 соответствовало третьей записи.Также обратите внимание на небольшую сложность из-за того, что некоторые дети имеют другое пространство имен ...

$xml = simplexml_load_string($xmlstr);
$a = 3;
$item = $xml->channel->item[$a-1];
echo "Title: " . $item->title . "\n";
echo "Description: " . $item->description . "\n";
$jw = $item->children('jwplayer', true);
echo "Image: " . $jw->image . "\n";
echo "Source: " . $jw->source->attributes()->file . "\n";

Вывод:

Title: April 3, 2019 
Description: Jody Wilson-Raybould and Jane Philpott are removed from the Liberal Caucus. Gerald Butts submits text messages, and other evidence, to the justice committee. The Environment Commissioner says Canada isn't doing enough to fight climate change. 
Image: http://media.cpac.ca/_app_images/tip_player_poster.png 
Source: http://www.cpac.ca/tip-podcast/1554286033.mp3

Демонстрация на 3v4l.org

...