2015-05-08 7 views
6

Utilizzo di Dom Crawler per ottenere solo testo (senza tag).Symfony 2 Dom Crawler: come ottenere solo testo() nell'elemento

$html = EOT<<< 
    <div class="coucu"> 
    Get Description <span>Coucu</span> 
    </div> 
EOT; 

$crawler = new Crawler($html); 
$crawler = $crawler->filter('.coucu')->first()->text(); 

uscita: Get Descrizione Coucu

voglio uscita (solo): Get Descrizione

UPDATE:

ho trovato una soluzione per questo : (ma è davvero una brutta soluzione)

... 
$html = $crawler->filter('.coucu')->html(); 
// use strip_tags_content in https://php.net/strip_tags 
$html = strip_tags_content($html,'span'); 
+0

possibile duplicato di [jquery - ottenere il testo per l'elemento senza figli testo] (http://stackoverflow.com/questions/11362085/jquery-get-text-for-element-without -children-text) –

+0

No, non sto usando jQuery – VoTue

+0

Non penso che ci sia un metodo per questo, ma puoi provare $ text = $ crawler-> filter ('. coucu') -> first() - > estratto (array ('_ text')); Credo che restituirà lo stesso risultato, ma vale comunque la pena sparare –

risposta

2

Sulla base dei criteri all'interno della vostra domanda, penso che sarebbe meglio serviti modificando il selettore CSS per: $crawler = $crawler->filter('div.coucu > span')

Da lì si può andare $span_text = $crawler->text();

o per semplificare le cose: $text = $crawler->filter('div.coucu > span')->text();

Il text() method restituisce il valore del primo elemento nell'elenco.

+0

Voglio ottenere "Ottieni descrizione Coucu". – VoTue

2

Nella stessa situazione. Ho finito per andare con:

$html = $crawler->filter('.coucu')->html(); 
$html = explode("<span", $html); 
echo trim($html[0]);