xpath不返回值

时间:2011-06-01 02:33:58

标签: php xpath foreach simplexml

当我使用以下代码var_dump时,我可以使用xpath提取必要的信息。当我尝试添加一个foreach循环以返回所有["href"]值时,我得到一个空白页面,任何想法,我搞砸了?

$dom = new DOMDocument();
@$dom->loadHTML($source);
$xml = simplexml_import_dom($dom);
$rss = $xml->xpath("/html/body//a[@class='highzoom1']");

$links = $rss->href;

foreach ($links as $link){ 
    echo $link; 
    }

以下是一系列信息。

array(96) {
  [0]=>
  object(SimpleXMLElement)#3 (2) {
    ["@attributes"]=>
    array(2) {
      ["href"]=>
      string(49) "/p/18351/test1.html"
      ["class"]=>
      string(10) "highzoom1"
    }
    [0]=>
    string(36) ""test1"
  }
  [1]=>
  object(SimpleXMLElement)#4 (2) {
    ["@attributes"]=>
    array(2) {
      ["href"]=>
      string(43) "/p/18351/test2.html"
      ["class"]=>
      string(10) "highzoom1"
    }
    [0]=>
    string(30) ""test2"
  }
  [2]=>
  object(SimpleXMLElement)#5 (2) {
    ["@attributes"]=>
    array(2) {
      ["href"]=>
      string(48) "/p/18351/test3.html"
      ["class"]=>
      string(10) "highzoom1"
    }
    [0]=>
    string(35) ""test3"
  }

2 个答案:

答案 0 :(得分:0)

$links = $rss->href;

永远不会工作,因为$ rss是一个DOMNodeList对象,并且没有href属性。相反,你想要这样做:

$rss = $xml->xpath("/html/body//a[@class='highzoom1']");

foreach($rss as $link) {
    echo $link->href;
}

或者您可以直接将$ rss作为数组进行处理:

echo $rss[5]->href; // echo out the href of the 6th link found.

答案 1 :(得分:0)

而不是

$rss = $xml->xpath("/html/body//a[@class='highzoom1']");

使用

$hrefs = $xml->xpath("/html/body//a[@class='highzoom1']/@href");

您正在使用的原始XPath表达式(上面的第一个)选择XML文档中的任何a元素,其class属性的值为'highzoom1'且{{1}元素)是a的后代,它是XML文档中顶部元素(名为body)的子元素。

但是,您要选择这些html元素的href属性,而不是a元素本身。

上面的第二个XPath表达式恰好选择了这些a元素的href属性