[PHP5] Parser un document html

canarder Messages postés 1714 Date d'inscription   Statut Membre Dernière intervention   -  
canarder Messages postés 1714 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai essayé de parser un document html comme un document xml avec la méthode suivante :
$xml = "http://site.com/xml.php";
$dom = new DOMDocument();
$dom->load($xml);


Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).

Ici j'essaye de parser la page d'une vidéo de YouTube :
Pastebin des erreurs

Mon code :
<?php
$video = isset($_GET['v']) ? $_GET['v'] : "kvDMlk3kSYg";
$xml = "https://www.youtube.com/".$video;
$dom = new DOMDocument();
$dom->load($xml);
$meta = $dom->getElementsByTagName("meta");
foreach ($meta as $title){
if($title->getAttribute("name")=="title"){
$title = $title->getAttribute("content");
break;
}
}
?>


Il me semble qu'il y avait quelque chose de spécial pour l'html mais je ne sais plus où j'ai vu ça.

Merci pour votre aide.


A voir également:

5 réponses

canarder Messages postés 1714 Date d'inscription   Statut Membre Dernière intervention   355
 
J'ai toujours l'impression que le php xml n'est pas vraiment facilement aidable quand je suis sûr ce forum. je vais essayer sur un autre (developpez) pour ces questions... demain.
0
Giorgiolino Messages postés 253 Date d'inscription   Statut Contributeur Dernière intervention   52
 
Bonjour,


parser un document html comme un document xml
Dès cette phrase tu donne déjà l'explication de ton problème.

Un document html n'est pas un document xml. Pourquoi utilises-tu une méthode qui n'êst pas adaptée pour t'étonner ensuite que cela ne fonctionne pas ?
La seule exception concerne les document XHTML qui peuvent être taités comme du XML. Mais encore faut-il être sûr que ton document soit du XHTML valide.

Tout ceci est d'autant plus étrange que l'objet DOMDOcument te fournit des méthodes telles que loadHTML ou loadHTMLFile qui te permettent de traiter du html.

plus d'infos --> https://www.php.net/manual/fr/class.domdocument.php



Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).
--> Ben justement. Voir point précédent.
0
canarder Messages postés 1714 Date d'inscription   Statut Membre Dernière intervention   355
 
oui j'avais déjà vu quelque part. merci je vais tester et je mettrais la méthode (si elle change).
arf wamp démarre pas des fois c'est bizarre ....
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
Bonjour,

Il y a plusieurs pistes possibles, mais je ne les ai pas expérimenté.

1) la piste Tidy, c'est un outil qui valide le code HTML et il existe une extension PHP:
https://www.php.net/manual/fr/book.tidy.php

2) la piste Google CHROME

CHROME est le navigateur de Google. Il est possible d'accéder au DOM d'une page HTML - mais pas en PHP -. Google CHROME remet en forme certains éléments non conformes à XML.

Par exemple, si vous faites

<table><tr><td>test</table>


Chrome va reformater le code dans son environnement:

<table><tr><td>test</td></tr></table>


CHROME intègre un analyseur de document HTMKL similaire à Firebug qui montre le code corrigé.

Je pense - mais à confirmer - qu'il doit être possible de récupérer ce code corrigé pour analyse. Et ce code HTML passera sans encombre une analyse XML.

Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
canarder Messages postés 1714 Date d'inscription   Statut Membre Dernière intervention   355
 
1- Je bosse en PHP.
2- Firebug sur Firefox est mieux que Google Chrome, en plus on peut utiliser Greasemonkey pour modifier l'arbre DOM.

Avec loadHTMLFile, j'ai plein d'erreur. Pourtant mon code fonctionne.
Un petit erreor_reporting(0); ... Sauf que j'aimerais bien régler ces erreurs.

<?php
$video = isset($_GET['v']) ? $_GET['v'] : "kvDMlk3kSYg";
$html = "https://www.youtube.com/".$video;
$dom = new DOMDocument();
$dom->loadHTMLFile($html);
$meta = $dom->getElementsByTagName("meta");
foreach ($meta as $title){
if($title->getAttribute("name")=="title"){
$title = $title->getAttribute("content");
break;
}
}
?>
<p>
<a href="http://youtu.be/<?php echo $video; ?>">
<img src="http://i.ytimg.com/vi/<?php echo $video; ?>/default.jpg" style="border:0px;text-align:left;" title="<?php echo $title; ?>" alt="Video image" /><br />
<b><?php echo $title; ?></b>
</a>
</p>
0