To powinny być po prostu $html->find('div.right > text')
, ale to nie będzie działać, ponieważ prosty HTML DOM Parser nie wydają się popierać bezpośrednie zapytania potomka.
Najpierw należy znaleźć wszystkie elementy <div>
i przeszukać węzły podrzędne dla węzła tekstowego. Niestety, metoda ->childNodes()
jest odwzorowana na ->children()
i dlatego zwraca tylko elementy.
Rozwiązaniem roboczym jest wywołanie ->find('text')
na każdym elemencie <div>
, po czym wyniki zostaną przefiltrowane na podstawie węzła nadrzędnego.
foreach ($doc->find('div.right') as $parent) {
foreach ($parent->find('text') as $node) {
if ($node->parent() === $parent && strlen($t = trim($node->plaintext))) {
echo $t, PHP_EOL;
}
}
}
Korzystanie DOMDocument
, to wyrażenie XPath zrobi taką samą pracę bez bólu:
$doc = new DOMDocument;
$doc->loadHTML($content);
$xp = new DOMXPath($doc);
foreach ($xp->query('//div/text()') as $node) {
if (strlen($t = trim($node->textContent))) {
echo $t, PHP_EOL;
}
}
skończyłeś próbował żadnego kodu? –
chcesz uzyskać lub chcesz wstawić w dziale? – liyakat
Czy umieścisz jeszcze 2 elementy div? lub czy to powtarza się jak element div wysłany? –