2016-01-16 54 views
0

我有這樣的HTML結構的選擇後的值:PHP與DOMXPath點心項目

<div class="wanted-list"> 
    <div class="headline"></div> 
    <div class="entry"> 
     <div></div> 
     <div></div> 
     <div class="length">1100</div> 
     <div></div> 
     <div class="status"> 
      <img src="xxxx" alt="open"> 
     </div> 
    </div> 
    <div class="entry mark"> 
     <div></div> 
     <div></div> 
     <div class="length">800</div> 
     <div></div> 
     <div class="status"> 
      <img src="xxxx" alt="open"> 
     </div> 
    </div> 
    <div class="entry"> 
     <div></div> 
     <div></div> 
     <div class="length">2300</div> 
     <div></div> 
     <div class="status"> 
      <img src="xxxx" alt="closed"> 
     </div> 
    </div> 
</div> 

我想僅選擇「開放」的項目,所以我做的:

$doc4 = new DOMDocument(); 
$doc4->loadHtmlFile('http://www.whatever.com'); 
$doc4->preserveWhiteSpace = false; 
$xpath4 = new DOMXPath($doc4); 
$elements4 = $xpath4->query("//div[@class='wanted-list']/div/div[5]/img[@alt='open']"); 

現在,如果我沒有弄錯,我們已經隔離了我們想要的「開放」項目。現在,我需要得到'長度'值,並且將它們相加得到總長度爲,所以我可以回顯它。我花了幾個小時嘗試不同的解決方案和研究,但我還沒有發現任何類似的東西。你們能幫忙嗎?

在此先感謝。

EDITED錯誤的div,對不起。

+0

這裏有一種方法,我跑這不使用'xpath'並糾正了HTML(div的是誤關閉,使得HTML無效).... https://eval.in/503044 – chris85

回答

1

我不確定你的意思是所有的計算都在xsl中完成,或者你只是想在PHP中使用長度總和,但是這會捕獲並總結長度。正如@ Chris85在評論中指出的那樣 - html無效 - 每個條目中都有備用的關閉div標籤〜大概圖像應該是div.status的子項?如果是這樣,那麼當試圖定位正確的父對象時,下面需要稍微修改。也就是說,我收到DOMDocument沒有任何警告,但解析它,但更好地解決而不是忽略!

$strhtml=' 
<div class="wanted-list"> 
    <div class="headline"></div> 
    <div class="entry"> 
     <div></div> 
     <div></div> 
     <div class="length">1100</div> 
     <div></div> 
     <div class="status"> 
      <img src="xxxx" alt="open"> 
     </div> 
    </div> 
    <div class="entry mark"> 
     <div></div> 
     <div></div> 
     <div class="length">800</div> 
     <div></div> 
     <div class="status"> 
      <img src="xxxx" alt="open"> 
     </div> 
    </div> 
    <div class="entry"> 
     <div></div> 
     <div></div> 
     <div class="length">2300</div> 
     <div></div> 
     <div class="status"> 
      <img src="xxxx" alt="closed"> 
     </div> 
    </div> 
</div>'; 


$dom = new DOMDocument(); 
$dom->loadHtml($strhtml);/* alternative to loading a file directly */ 
$dom->preserveWhiteSpace = false; 

$xp = new DOMXPath($dom);    
$col=$xp->query('//img[@alt="open"]');/* target the nodes with the attribute you need to look for */ 
/* variable to increment with values found from DOM values */ 
$length=0; 

foreach($col as $n) {/* loop through the found nodes collection */ 
    $parent=$n->parentNode->parentNode;/* corrected here to account for change in html layout ~ get the suitable parent node */ 

    /* based on original code, find value from particular node */ 
    $length += $parent->childNodes->item(5)->nodeValue; 
} 
echo 'Length:'.$length; 
+0

Chris85和@ RamRaider,那些錯誤的div是我的錯,我糾正了它們。我試圖簡化原始的html代碼。我的想法是在PHP中獲取長度的總和,並通過DOMXPath完成,我需要學習如何處理不同的情況,因爲我必須從5,000多個不同的數據源中檢索數據。有些很容易處理,但其他人對我糟糕的編程技巧很難。很高興知道是否有一個好的DOMXPath教程,我發現該手冊很難找到通過它的方法。 – Karls

+0

你的代碼完美地工作,我正在適應它錯誤的方式。非常感謝你。我可以請你提供一些關於你的代碼的細節嗎?或者你能否指出我有什麼好的資源來學習不同情況下的不同組合?再次感謝。 – Karls

+0

非常感謝@RamRaider – Karls