2012-12-10 68 views
1

寫這篇:
PHP的XPath:評估查詢結果作爲整數

$likes = $xpath->query('//span[@class="LikesCount"]'); 

這是啥子,我得到:

155 like 

我想編寫查詢,以便number_before_like> 5

$likes = $xpath->query(' 

((int)substring-before(//span[@class="LikesCount"], " ")) > 5 


'); 

跟隨mar kup:

<div class="pin"> 

[...] 

<a href="/pin/56787645270909880/" class="PinImage ImgLink"> 
    <img src="http://media-cache-ec3.pinterest.com/upload/56787645270909880_d7AaHYHA_b.jpg" alt="Krizia" data-componenttype="MODAL_PIN" class="PinImageImg" style="height: 288px;"> 
</a> 

<p class="stats colorless"> 
    <span class="LikesCount"> 
     2 likes 
    </span> 
    <span class="RepinsCount"> 
     6 repins 
    </span> 
</p> 

[...] 

</div> 
+0

什麼標記是什麼樣子? – dnagirl

+0

增加了標記,我在這個O_o –

+1

上8小時後卡住了,最簡單的方法是將數字換成另一個跨度。然後,您可以選擇'.LikesCount',其中子跨度的文本值大於5.如果您無法更改標記,則需要一個正則表達式來捕獲文本節點中的第一個數字。 – dnagirl

回答

2

您可以單獨通過XPath語法做到這一點,確保無關的空白被從圖片中刪除。

$query = 'number(substring-before(normalize-space(
      //span[@class="LikesCount" 
      and substring-before(normalize-space(.), " ") > 5]), " "))'; 

$likes = $xpath->evaluate($query); 

或者,讓PHP爲您做好工作。

$query = 'number(php:functionString("intval", 
      //span[@class="LikesCount" 
      and php:functionString("intval", .) > 5]))'; 

$xpath->registerNamespace('php', 'http://php.net/xpath'); 
$xpath->registerPHPFunctions("intval"); 
$likes = $xpath->evaluate($query); 

如果你打算開始問PHP做一些工作,它很可能是更容易使用一個簡單的查詢和過濾結果,因爲你需要。

foreach ($xpath->query('//span[@class="LikesCount"]') as $span) { 
    $int = (int) $span->nodeValue; 
    if ($int > 5) { 
     echo $int; 
    } 
} 
+0

的謝謝salathe,我怎麼打印出值。當我寫的回聲$ likes->項(0) - >的textContent「
」?我得到這個錯誤:調用一個非對象的成員函數item() –

+1

'$ likes'是值 – salathe

+0

它的工作原理,謝謝!!!現在我將花費ne xt 2小時找出原因:P –

1

我相信你的問題實際上是你選擇的<span>的額外空間。嘗試剝離它們。例如,你可以使用normalize-space()

substring-before(normalize-space(//span[@class="LikesCount"]), " ") 

等等數字符串將是converted to a double的XPath處理器比運營商更大的執行之前。 (您可以通過number()強制執行此轉換,但在這種情況下這種轉換是不必要的,並且可能會因爲自動轉換失敗而導致失敗 - 導致空白。)

+1

謝謝你馬克,問題是,我似乎不能夠剝離的數量指出,字符串,要麼是 –