2013-10-14 63 views
1

這裏是我的HTML:XPath的會計不存在的節點

<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個「後」類div。

我知道這可能無法使用XPATH,但也許有PHP解決方案呢?

回答

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[] = ""; 
    } 
} 
+0

會計對於所有的指數,但沒有數據顯示。也許我們需要在某處添加一個'nodeValue'?我在'item(0)'之後試過,但沒有做到。另外,我使用loadHTMLFile,因爲它請求一個網絡地址。這有什麼區別嗎?最後,你會看到我添加了一個包裝p標籤 – jkushner

+0

@jkushner,看我的編輯。 – Rafael

0

我不知道怎麼會出現在PHP,但下面的XPath

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

似乎返回所需的數據