2015-04-03 4 views
0

Вот это фрагмент кода, из которого я должен принести FirstChild из DIV с именем и-Роу-6 ...FirstChild в DOMDocument не работает

<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

+0

И что означает «не работает»? Вы получите больше и больше ответов, если будете конкретными. Что происходит, и что вы ожидали. – DavidS

+0

где это '$ first', и откуда ожидается выход? Вы говорите первый ребенок div с классом u-row-6. Это будет следующий div. Ваш код выглядит так, будто вы хотите получить цену в сильном элементе. – Gordon

ответ

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 запрос вместо того, чтобы получить все strong тегов в пределах div класса «U-Роу-6», а затем цикл через найденные тег:

$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 € * 

XPaths на самом деле очень удобны. Узнайте больше о них here.

+0

@mhall ... точно то же я ищу ... у меня нехватка знаний в xpath ... спасибо хотя, чтобы помочь мне в этом ... еще раз спасибо – user3305327

Смежные вопросы