Es sollte einfach seine $html->find('div.right > text')
, aber das wird da nicht funktioniert Einfache HTML-DOM-Parser direkte Nachkommen Abfragen zu unterstützen scheint nicht.
Sie müssten also zuerst alle <div>
Elemente finden und die Kindknoten nach einem Textknoten durchsuchen. Leider ist die ->childNodes()
-Methode auf ->children()
abgebildet und gibt daher nur Elemente zurück.
Eine funktionierende Lösung ist ->find('text')
auf jedem Element <div>
aufrufen, nach dem Sie die Ergebnisse basierend auf dem übergeordneten Knoten filtern.
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;
}
}
}
Mit DOMDocument
dieser XPath-Ausdruck wird ohne den Schmerz, die gleiche Arbeit tun:
$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;
}
}
haben Sie einen Code versucht? –
wollen oder einfügen in div? – liyakat
Können Sie zwei weitere div-Elemente posten? oder ob sich das wie das gepostete div-element wiederholt? –