Xpath DOMDocument不从节点返回数据

时间:2013-10-15 17:51:34

标签: php dom xpath domdocument

我正在使用dom文档扫描网站并从内部@src元素接收img属性。

html是:

  <div class="content">
    <div class="post">
      <img src="abc"/>
    </div>
    <div class="post">
      <img src="abc1"/>
    </div>
    <div class="post">
    </div>
  </div>

注意:我在@src中没有使用xpath。而且,这正是我需要编码的方式。

这是我的php:

$document = new DOMDocument();
$document->loadXML($file);
$XPath = new DOMXPath($document);
$Query = '//div[@class="content"]//div[@class="post"]';

$posts = $XPath->query($Query);

foreach ($posts as $post) {
    if($XPath->evaluate("@src", $post))
    {
        $return[] = $XPath->evaluate("@src", $post)->item(0);
    }else{
        $return[] =  "";
    }
}

它正在向数组$return添加位置,但它们都是空数组位置。

我的问题是如何让它从php代码输出数据:

$return[] = $XPath->evaluate("@src", $post)->item(0); 

这不起作用:

$return[] = $XPath->evaluate("@src", $post)->item(0)->nodeValue; 

1 个答案:

答案 0 :(得分:1)

.//@src[1]

  • . =&gt;相对于节点
  • //@ =&gt;后代
  • @src =&gt; src属性
  • [1] =&gt;第一个。

如果您只关心价值,您甚至可以使用string(nodeset)(当然,如果您需要能够操纵属性并使用->item(0)解决方案,请将其保留)。

foreach ($posts as $post){
    $return[] = $XPath->evaluate("string(.//@src[1])",$post);
}