Простой HTML DOM - пропустить определенный элемент - PullRequest
2 голосов
/ 12 марта 2019

Я хочу игнорировать содержимое <a>, которое находится внутри элемента <h3>, и получать только текст <h3>.

<h3>
144.000 TL
<a class="emlak-endeksi-link trackClick trackId_emlak-endeksi-link" id="emlakEndeksiLink">
Emlak Endeksi</a>
</h3>

Пример: нужно только получить 144.000 TL иигнорировать (Эмлак Эндекси)

foreach ($html1->find('div.classifiedInfo h3') as $price) {
    $ilanlar['price'] = $price->plaintext;
}

Ответы [ 3 ]

1 голос
/ 12 марта 2019

Может быть, удаление тега <a> поможет:

$str = <<<str
<h3>
144.000 TL
<a class="emlak-endeksi-link trackClick trackId_emlak-endeksi-link" id="emlakEndeksiLink">
Emlak Endeksi</a>
</h3>
str;

$html = str_get_html($str);

// Find first <h3>
$h3 = $html->find('h3', 0);

// Find first <a> inside the <h3>, or use $h3->find('a') to find all of them
$a = $h3->find('a', 0);

// Remove <a> tag
$a->outertext = '';

// Output: "144.000 TL"
print trim($h3->innertext);
1 голос
/ 12 марта 2019

не очень знаком с простым html dom, но ... выбор текстового узла с помощью http://simplehtmldom.sourceforge.net/manual.htm#frag_find_textcomment должен помочь?

$ilanlar['price'] = $price->find('text', 0)->plaintext;
0 голосов
/ 12 марта 2019

Вы можете сделать это с помощью регулярного выражения.

preg_match_all('\<h3>([^\n]*\n+)+<a([^\n]*\n+)+<\/h3>\', $content, $output);
echo $output[1];

https://regex101.com/r/qM5Nlk/1

...