E dovrebbe essere semplicemente$html->find('div.right > text')
, ma che non funziona perché semplice HTML DOM Parser non sembra supportare le query discendente diretto.
Quindi dovresti trovare prima tutti gli elementi <div>
e cercare i nodi figlio per un nodo di testo. Sfortunatamente, il metodo ->childNodes()
è mappato su ->children()
e quindi restituisce solo gli elementi.
Una soluzione operativa è chiamare ->find('text')
su ciascun elemento <div>
, dopo il quale si filtrano i risultati in base al nodo genitore.
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;
}
}
}
Utilizzando DOMDocument
, questa espressione XPath farà lo stesso lavoro senza il dolore:
$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;
}
}
fonte
2013-04-11 07:34:56
hai provato alcun codice? –
che vuoi ottenere o vuoi inserire in div? – liyakat
Puoi pubblicare altri 2 elementi div? o se ciò si ripete come l'elemento div postato? –