2015-04-03 59 views
0

這裏是代碼片段我從中獲取從DIV命名的U行-6則firstChild ...則firstChild在DOM文檔不工作

<div class="u-Row-6"> 
<div class='article_details_price2'> 
<strong > 
855,90&nbsp;&euro; * 
</strong> 
<div class="PseudoPrice"> 
<em>EVP: 999,00&nbsp;&euro; *</em> 
<span> 
(14.32 % <span class="frontend_detail_data">gespart</span>) 
</span> 
</div> 
</div> 
</div> 

爲此,我使用了下面的代碼:

foreach($dom->getElementsByTagName('div') as $p) { 
    if ($p->getAttribute('class') == 'u-Row-6') { 
     if ($first) { 
      $name = $p->firstChild-nodeValue; 
      $name = str_replace('€', '', $name); 
      $name = str_replace(chr(194), " ", $name); 
      $first = false; 
     } 
    } 
} 

但這個神祕代碼不爲我工作

+0

發佈代碼示例(包括HTML)時請使用縮進。 – DavidS 2015-04-03 17:22:04

+0

「不工作」是什麼意思?如果你是特定的,你會得到更好,更多的答案。發生了什麼,你期望會發生什麼。 – DavidS 2015-04-03 17:22:36

+0

「$ first」來自哪裏以及期望的輸出是什麼?你說的第一個孩子的分類與U-行6級。那將是下面的div。你的代碼看起來像你想在強大的元素中獲得價格。 – Gordon 2015-04-03 17:24:05

回答

1

有一些與你的代碼的問題:

  • $first未初始化的true值,這將防止串替換代碼甚至一度運行

  • $p->firstChild-nodeValue缺少>nodeValue

  • $p->firstChild實際上將解析爲一個文本節點(<div class="u-Row-6"><div class='article_details_price2'>之間的任何文本 - 目前沒有任何內容),而不是您正在查找的strong,也可能不是<div class='article_details_price2'>,正如人們所預料的那樣。

您可能需要使用XPath查詢,而不是,獲得div類的「U-行-6」,然後依次通過發現標籤內的所有strong標籤:

$src = <<<EOS 
<div class="u-Row-6"> 
<div class='article_details_price2'> 
<strong > 
855,90&nbsp;&euro; * 
</strong> 
<div class="PseudoPrice"> 
<em>EVP: 999,00&nbsp;&euro; *</em> 
<span> 
(14.32 % <span class="frontend_detail_data">gespart</span>) 
</span> 
</div> 
</div> 
</div> 
EOS; 

$dom = new DOMDocument(); 
$dom->loadHTML($src); 

$xpath = new DOMXPath($dom); 
$strongTags = $xpath->query('//div[@class="u-Row-6"]//strong'); 

foreach ($strongTags as $tag) { 
    echo "The strong tag contents: " . $tag->nodeValue, PHP_EOL; 

    // Replacement code goes here ... 
} 

輸出:

The strong tag contents: 
855,90 € * 

XPath實際上非常方便。詳細瞭解它們here

+0

@mhall ...元素同樣在尋找......我在xpath中缺乏知識......感謝雖然在這方面幫助我......再次感謝 – user3305327 2015-04-03 18:31:05