Come posso trovare i nodi di testo in un frammento di HTML?
Domanda
Sto cercando di analizzare un frammento di HTML, utilizzando le funzioni di PHP DOM. Ho messo a nudo fuori tutto tranne comma, della portata e di interruzione di riga tag, e ora voglio recuperare tutto il testo, insieme con i suoi stili di accompagnamento.
Quindi, mi piacerebbe ottenere ogni pezzo di testo, uno per uno, e per ognuno che può quindi risalire l'albero per ottenere i valori di particolari attributi (Mi interessa solo in alcuni tra quelli specifici, come il colore, ecc.).
Come posso fare questo? O sto pensando nel modo sbagliato?
Grazie!
Nessuna soluzione corretta
Altri suggerimenti
Supponiamo di avere un DOMDocument qui:
$doc = new DOMDocument();
$doc->loadHTMLFile('http://stackoverflow.com/');
È possibile trovare tutti i nodi di testo utilizzando un semplice XPath.
$xpath = new DOMXpath($doc);
$textNodes = $xpath->query('//text()');
Proprio foreach
su di esso per iterare su tutti i textnodes:
foreach ($textNodes as $textNode) {
echo $textNode->data . "\n";
}
Da questo, si può salire l'albero del DOM utilizzando ->parentNode
.
Spero che questo può dare un buon inizio.
Per coloro che sono più a suo agio con selettori CSS3, e sono disposti a includere una singola classe PHP in più nel loro progetto, vorrei suggerire l'uso di Simple PHP DOM parser . La soluzione sarebbe simile al seguente:
$html = file_get_html('http://www.example.com/');
$ret = $html->find('p, span');
$store = array();
foreach($ret as $element) {
$store[] = array($element->tag => array('text' => $element->innertext,
'color' => $element->color,
'style' => $element->style));
}
print_r($store);