XPath - выберите потомка $ var - PullRequest
       20

XPath - выберите потомка $ var

1 голос
/ 21 сентября 2009

Я пытаюсь распечатать все элементы <title> и <description> канала RSS 2.0 в списке, используя 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
    )
)

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

Ответы [ 4 ]

1 голос
/ 21 сентября 2009

Попробуйте:

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) перед свойством.

0 голосов
/ 21 сентября 2009

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

0 голосов
/ 21 сентября 2009

Попробуйте:

$item->xpath('string(title)')
0 голосов
/ 21 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...