XPath - 选择$ var的子节点

时间:2009-09-21 14:59:39

标签: php xpath

我正在尝试使用PHP在列表中打印RSS 2.0 Feed的所有<title><description>元素。我可以使用$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')不会返回title元素中的文本,但会返回一个数组:

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

为什么它返回一个数组而不是元素中的文本?

4 个答案:

答案 0 :(得分:1)

尝试:

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
}

使用SimpleXML时无需使用其他XPath查询,第一个XPath将提取与XPath匹配的simpleXML对象数组。然后,您需要做的就是访问节点,就好像它是SimpleXML对象的属性一样。如果您希望将其用作字符串,则需要将(string)置于属性前面,将其强制转换为一个字符串。

答案 1 :(得分:0)

xpath函数返回与路径匹配的元素数组。这就是为什么你得到一个元素的外部数组。您不想使用xpath来获取标题。您想从元素中获取title属性。只需直接访问它。

答案 2 :(得分:0)

尝试:

$item->xpath('string(title)')

答案 3 :(得分:-1)

试试'rss / channel / item。' (带点)