2009-11-19 4 views
1

J'ai une page HTML contenant beaucoup de balises META et je veux les analyser pour en trouver. Voici le code que j'utilise, mais il ne prend aucune des balises.PHP DOMDocument GetElementsByTagName ne trouve pas les éléments

$dom = new DOMDocument(); 
$dom->preserveWhiteSpace = false; 
$dom->loadHtml($contents); 
$metaChildren = $dom->getElementsByTagName('meta'); 
var_dump($metaChildren); 

Voici un extrait du HTML que je utilise (je l'ai remplacé la flèche avec une attelle):

[meta name="GZPlatform" content=" pc"] 
[meta name="GZFeatured" content=" Gone Gold"] 
[meta name="GZHeadline" content=" pc"] 
[meta name="GZP_ID" content=" pc 21153"] 

Des idées?

+0

Pouvez-vous poster un extrait du code HTML que vous essayez de faire correspondre. Je me demande si vous avez un attribut de nom. – MrChrister

Répondre

1

Etes-vous sûr que les étiquettes ne correspondent pas? Quelle est la sortie de var_dump? Quelle est la valeur que vous obtenez lorsque vous utilisez var_dump($metaChildren->length)? Votre code semble fonctionner ici:

<? 
$dom = new DOMDocument(); 
$dom->preserveWhiteSpace = false; 
$dom->loadHtmlFile('test.html'); 
$metaChildren = $dom->getElementsByTagName('meta'); 
for ($i = 0; $i < $metaChildren->length; $i++) { 
    $el = $metaChildren->item($i); 
    print $el->getAttribute('name') . '=' . $el->getAttribute('content') . "\n"; 
} 
?> 

donne une sortie:

GZPlatform= pc 
GZFeatured= Gone Gold 
GZHeadline= pc 
GZP_ID= pc 21153 
0

Ma conjecture serait que le HTML n'est pas valide et que l'appel $dom->loadHtml échoue. Je crois que l'appel renvoie true | false. Donc, peut-être quelque chose comme ceci:

if($dom->loadHtml($contents)){ 
    $metaChildren = $dom->getElementsByTagName('meta'); 
}else{ 
    //handle properly 
} 
+0

Je ne savais pas qu'il devait être valide html – jkushner

+0

Il a chargé très bien – jkushner

+0

effectivement, regardé la documentation, vous avez raison. Je suis habitué à utiliser des analyseurs XML. Dans tous les cas, c'est une bonne idée de vérifier que la charge a bien fonctionné avant de continuer. – jaywon

0

pourrait-il que l'analyseur vous attend de fermer les balises meta?

<meta name="name" /> 

ou

<meta name="name"></meta> 
Questions connexes