2012-09-04 3 views
1

J'utilise DOMCrawler pour sélectionner du HTML basé sur un sélecteur CSS, comme ceci;Utilisation de Symfony Crawler pour sélectionner le bloc HTML

$selector = '#content'; 
$html = $my_fetched_html; 
$crawler = new Crawler($html); 
$crawler = $crawler->filter($selector); 

Tout cela est bon et si j'itérer les éléments de chenilles $, il confirme que le sélecteur a travaillé, à savoir, je reçois seulement div et non le code HTML complet. Mais, quand il s'agit de sauver le HTML j'ai des problèmes, parce que faire quelque chose comme ça;

$html = ''; 

foreach ($crawler as $domElement) { 
    $html.= $domElement->ownerDocument->saveHTML(); 
} 

echo $html; 

(Comme l'a démontré in this question)

Je reçois la structure complète à nouveau et je suppose parce que son $ ownerDocument est toujours le document de crawler $ (non sélectionné) d'origine. Donc, ce dont j'ai besoin, c'est de pouvoir instancier un nouveau DomDocument (peut-être?) En y ajoutant mon Element, puis saveHTML() à partir de là. Je pense?

Pseudo-code;

$doc = new DomDocument 
foreach ($crawler as $domElement) { 
    $doc->addChild($domElement); 
} 

$new_html = $doc->saveHTML(); 

J'aimerais toute aide, son départ pour faire ma tête.

Répondre

2

Vous devez passer l'enfant pour lequel vous voulez que le code html à saveHTML(). c'est-à-dire:

$html.= $domElement->ownerDocument->saveHTML($domElement); 
+0

Belle! Je vous remercie. – Christian

Questions connexes