2009-09-21 5 views
1

Я пытаюсь напечатать все элементы RSS 2.0 RSS в списке, используя PHP. Я мог бы просто получить эти элементы, используя: $rss->xpath('rss/channel/item/title | rss/channel/item/description'), но я хочу использовать его немного иначе.

Я хочу использовать PHP для перебора всех <item> элементов, используя foreach подобное заявление:

<?php 
foreach($xml->xpath('/rss/channel/item') as $item){ 
    print_r($item->xpath('title')); 
} 
?> 

Но $item->xpath('title') не возвращает текст внутри элемента заголовка, но она возвращает массив:

Array 
(
    [0] => SimpleXMLElement Object 
    (
     [0] => Ubuntu 10.04 LTS 'Lucid Lynx' laat Gnome 3 nog links liggen 
    ) 
) 

Почему он возвращает массив, а не текст внутри элемента?

ответ

1

Try:

foreach($xml->xpath('/rss/channel/item') as $item) 
{ 
    print_r($item->title); // This pulls out the simpleXML object 
    print_r((string)$item->title); // This pulls out the string as expected 
} 

Там нет необходимости использовать другой XPath запрос при использовании SimpleXML, первый XPath вытащит массив объектов SimpleXML, совпадающих с XPath. Тогда все, что вам нужно сделать, - это получить доступ к узлу, как если бы это было свойство объекта SimpleXML. Если вы хотите, чтобы он использовался в качестве строки, вам необходимо отдать его одному, поставив (string) перед этим свойством.

-1

Попробуйте 'rss/channel/item.' (с точкой)

+0

Hi Powtac, Точка не возвращает результатов ... Где это так? ^^ – Harmen

0

Функция xpath возвращает массив элементов, соответствующих пути. Вот почему вы получаете внешний массив с одним элементом. Вы не хотите использовать xpath, чтобы получить заголовок. Вы хотите получить атрибут title из элемента. Просто обращайтесь к нему напрямую.

Смежные вопросы