Фильтрация большего количества категорий из элемента XML

0

Я хотел бы получать новости, в которых есть ребенок <category>Lifestyle</category>. Но мой код в настоящее время получает только первую категорию, и я бы хотел, чтобы код для поиска всех <category> в одном <item> Я написал этот код в PHP до сих пор:

<?php
$html = "";
$url = "http://www.nu.nl/rss";
$xml = simplexml_load_file($url);
for($i = 0; $i < 10; $i++){

    $title = $xml->channel->item[$i]->title;
    $link = $xml->channel->item[$i]->link;
    $description = $xml->channel->item[$i]->description;
    $pubDate = $xml->channel->item[$i]->pubDate;
    $category = $xml->channel->item[$i]->category;

    if(strpos($category, 'Binnenland')!==false) {   
    $html .= "<a href='$link'><h3>$title</h3></a>";
    $html .= "$description";
    $html .= "<br />$pubDate & $category<hr />";
    }
}
echo $html;
?>

Некоторые <item> имеют больше категорий, но также должны быть в моих отфильтрованных новостях, если они содержат <category >Lifestyle</category> (но мой код в настоящее время находит только первый)

Часть XML:

  <item>
     <title>Elsevier lijft Newsflo in</title>
     <link>http://www.nu.nl/beurs/3970862/elsevier-lijft-newsflo-in.html</link>
     <description>Elsevier neemt het Britse Newsflo over. Dat maakt het bedrijf maandag bekend.</description>
     <pubDate>Mon, 12 Jan 2015 11:43:41 +0100</pubDate>
     <guid isPermaLink="false">3970862</guid>
     <enclosure url="http://media.nu.nl/m/m1mxod5a5wxc_sqr256.jpg/elsevier-lijft-newsflo-in.jpg" length="0" type="image/jpeg" />
     <category>Beurs</category>
     <dc:creator>ANP</dc:creator>
     <dc:rights>copyright photo: ANP</dc:rights>
     <atom:link href="http://nu.nl/beurs/3800685/elsevier-koopt-medische-informatieleverancier.html" type="text/html" rel="related" title="Elsevier koopt medische informatieleverancier" />
  </item>
  <item>
     <title>'Frida Giannini krijgt geen afscheidsshow bij Gucci'</title>
     <link>http://www.nu.nl/lifestyle/3970858/frida-giannini-krijgt-geen-afscheidsshow-bij-gucci.html</link>
     <description>Frida Giannini, voormalig hoofdontwerpster van Gucci, heeft geen grote afscheidsshow gekregen zoals verwacht. De ontwerpster zou vrijdag stilletjes vertrokken zijn bij het label.</description>
     <pubDate>Mon, 12 Jan 2015 11:41:52 +0100</pubDate>
     <guid isPermaLink="false">3970858</guid>
     <enclosure url="http://media.nu.nl/m/m1mxn43acqev_sqr256.jpg/frida-giannini-krijgt-geen-afscheidsshow-bij-gucci.jpg" length="0" type="image/jpeg" />
     <category>Lifestyle</category>
     <dc:creator>NU.nl</dc:creator>
     <dc:rights>copyright photo: Wenn</dc:rights>
     <atom:link href="http://nu.nl/lifestyle/3970265/alessandro-michele-nieuwe-hoofdontwerper-gucci.html" type="text/html" rel="related" title="'Alessandro Michele nieuwe hoofdontwerper Gucci'" />
     <atom:link href="http://nu.nl/lifestyle/3951514/hoofdontwerpster-en-directeur-vertrekken-bij-gucci.html" type="text/html" rel="related" title="Hoofdontwerpster en directeur vertrekken bij Gucci" />
     <atom:link href="http://nu.nl/lifestyle/3783917/hoofdontwerpster-gucci-spreekt-geruchten-vertrek.html" type="text/html" rel="related" title="Hoofdontwerpster Gucci spreekt geruchten vertrek tegen" />
  </item>
  <item>
     <title>Militairen met buitenlandse partner naar rechter</title>
     <link>http://www.nu.nl/binnenland/3970856/militairen-met-buitenlandse-partner-rechter.html</link>
     <description>Een aantal militairen met een buitenlandse partner stapt naar de rechter omdat zij al maanden geschorst thuis zitten. De schorsing is het gevolg van het feit dat hun partner niet gescreend kan worden.</description>
     <pubDate>Mon, 12 Jan 2015 11:41:24 +0100</pubDate>
     <guid isPermaLink="false">3970856</guid>
     <enclosure url="http://media.nu.nl/m/m1oxcv7anu4p_sqr256.jpg/militairen-met-buitenlandse-partner-rechter.jpg" length="0" type="image/jpeg" />
     <category>Binnenland</category>
     <category>Lifestyle</category>
     <dc:creator>ANP</dc:creator>
     <dc:rights>copyright photo: ANP</dc:rights>
  </item>

Я думаю, что я ошибся в PHP, но я не знаю, как обойти это...

Теги:

1 ответ

0

Выберите только желаемый <item> с помощью xpath():

$xml = simplexml_load_string($x); // assume XML in $x
$items = $xml->xpath("//item[category='Lifestyle']");

//item будет выбирать все узлы узлов, независимо от их положения в дереве, условие находится в [], $item - массив, содержащий элементы SimpleXML.

Вывод:

foreach ($items as $item) echo $item->title . PHP_EOL;

см. работу: https://eval.in/241693

Ещё вопросы

Сообщество Overcoder
Наверх
Меню