XPath记帐不存在的节点

时间:2013-10-14 19:20:47

标签: php xpath

这是我的HTML:

<div class="content">
    <div class="post">
                     <p class="imgcontent">
                  <img src="hello.jpg"/>
                      </p>
    </div>
    <div class="post">
                     <p></p>
    </div>
    <div class="post">
                    <p class="imgcontent">
          <img src="hello1.jpg"/>
                     </p>
    </div>      
</div>

这是我的XPATH:

//div[@class="content"]//div[@class="post"]//@src

结果如下:

 [0] => hello.jpg
 [1] => hello1.jpg

我想要的是:

[0] => hello.jpg
[1] => ""
[2] => hello1.jpg

正如您所看到的,代码应该有3个数组位置,因为有3个“post”类div。

我知道使用XPATH可能无法实现这一点,但是可能有一个PHP解决方案吗?

2 个答案:

答案 0 :(得分:0)

我不知道它会如何出现在php中但是跟随xpath

//div[@class="content"]//div[@class="post" and not(.//@src)] | //div[@class="content"]//div[@class="post"]//@src

似乎返回了所需的数据

答案 1 :(得分:0)

这是如何在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("//p//@src", $post))
    {
        $return[] = $XPath->evaluate("//p//@src", $post)->item(0);
    }else{
        $return[] =  "";
    }
}