2015-10-22 106 views
0

我旁邊HTML結構DIV值(內容/文):獲取使用XPath

<li id="REQUIRED_ITEM_1" class="listing-post"> 

    <a class="listing-thumb" href="blah" title="blah" data-palette-listing-image=""> 

     <img src="REQUIRED_ITEM_2" width="75" height="75" alt="blah"> </a> 

    <div class="listing-detail "> 

     <div class="listing-title"> 

      <div class="listing-icon hidden"></div> 

       <a href="REQUIRED_ITEM_3" class="title" title="REQUIRED_ITEM_4">blah</a> 

       <div class="listing-maker"> 

       <span class="name wrap"><a href="REQUIRED_ITEM_5">blah</a></span> 

       </div> 

     </div> 

     <div class="listing-date"> 
      REQUIRED_ITEM_6 
     </div> 

     <div class="listing-price"> 
      Sold 
     </div> 

    </div> 
    </li> 

有幾十這些<li>在同一頁上,都具有不同的ID和內容。我需要的內容標記爲REQUIRED_ITEM_1 - REQUIRED_ITEM_6。

我使用XPath的幫助下收集這些<li> S中的數據。

這裏是我使用的代碼:

foreach($xpath->query("//li[@class='listing-post']") as $link) { 

    $REQUIRED_ITEM_1 = $link->getAttribute('id'); 
    $REQUIRED_ITEM_2 = $xpath->query(".//img", $link)->item(0)->getAttribute('src'); 
    $REQUIRED_ITEM_3 = $xpath->query(".//a", $link)->item(1)->getAttribute('href'); 
    $REQUIRED_ITEM_4 = $xpath->query(".//a", $link)->item(1)->getAttribute('title'); 
    $REQUIRED_ITEM_5 = $xpath->query(".//a", $link)->item(2)->getAttribute('href'); 

    $REQUIRED_ITEM_6 = $xpath->query("./div/text", $link)->item(4); 
} 

它的工作原理適用於前5個REQUIRED_ITEMs,但它似乎變得包含在listing-date DIV(REQUIRED_ITEM_6)是錯誤的文字代碼。

而且,這是我的解析HTML和收集數據的最佳方式,或是否有更好的方法嗎?

回答

1

這裏是XPath得到REQUIRED_ITEM_6

//li[@class='listing-post']//div[@class='listing-date']/text() 

那會快一點(但第一個版本可能會更安全,因爲它是基於XML的結構較少依賴)。

//li[@class='listing-post']/div/div[@class='listing-date']/text() 

所以,你的代碼必須看起來像這樣的事情(但是你可能需要與你的PHP來調整它點點,不知道爲什麼你使用的項目(4))。

$REQUIRED_ITEM_6 = $xpath->query(".//div[@class='listing-date']/text()", $link)->item(0)->textContent; 
+0

會有什麼確切的查詢代碼? (以'$ REQUIRED_ITEM_6 = $ xpath-> query'開頭) – Acidon

+0

我已經更新了答案,並且需要準確的代碼行。 –

+0

剛剛嘗試過,並得到「類的DOMNodeList的對象無法轉換爲字符串」錯誤的代碼 – Acidon