2010-07-05 4 views
3

Lorsque j'essaie de charger un fichier HTML en XML en utilisant simplexml_load_string je reçois beaucoup d'erreurs et d'avertissements concernant le code HTML et il échoue, existe-t-il un moyen de charger correctement un fichier html en utilisant SimpleXML?PHP SimpleXML: Comment charger un fichier HTML?

Ce fichier HTML peut contenir des espaces inutiles et peut-être d'autres erreurs que j'aimerais que SimpleXML ignore.

+1

« tis tort d'utiliser SimpleXML pour analyser les pages html, mais – silent

+0

@silent: Qu'en est-il xhtml? n'est-ce pas supposé être valide xml? – beldaz

Répondre

2

Je suggère d'utiliser PHP Simple HTML DOM. Je l'ai moi-même utilisé pour tout ce qui concerne le grattage de pages, la manipulation de fichiers de modèles HTML et c'est très simple et assez puissant et devrait parfaitement convenir à vos besoins.

est ici quelques exemples de leurs documents qui montrent le genre de choses que vous pouvez faire:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 
+0

J'ai eu des problèmes avec Simple DOM car il utilise l'extension PHP DOM en interne, et il ne chargera pas les pages HTML complètement cassées. – Quamis

+1

peut toujours nettoyer le contenu en premier avec PHP Tidy http://php.net/manual/fr/book.tidy.php – robjmills

+0

@Quamis: C'est faux, DOM simple n'est * pas * basé sur l'extension PHP DOM. – hakre

0

check La page de manuel this, une de ces options (LIBXML_NOERROR par exemple) peut vous aider .. mais gardez à l'esprit qu'un html n'est pas nécessairement un xml valide, donc l'analyser comme xml pourrait ne pas fonctionner.

19

Utilisez DomDocument::loadHtmlFile avec simplexml_import_dom pour charger des pages HTML non wellformed dans SimpleXML.

+5

Ceci devrait être la réponse acceptée. – hakre

0

Voici un code rapide pour charger une page html externe, puis l'analyser avec un simple xml.

//suppresses errors generated by poorly-formed xml 
    libxml_use_internal_errors(true); 

    //create the html object 
    $html = new DOMDocument(); 

    //load the external html file 
    $html->loadHtmlFile('http://blahwhatever.com/'); 

    //import the HTML object into simple xml 
    $shtml = simplexml_import_dom($html); 

    //print the result 
    echo "<pre>"; 
    print_r($shtml); 
    echo "</pre>";