PHP DOMDocument GetElementsByTagName Elements bulma değil

3 Cevap php

Ben meta etiketleri bir sürü içeren bir HTML sayfası var ve ben bazı olanları bulmak için onları ayrıştırmak istiyorum. İşte ben kullanıyorum kod, ama etiketleri herhangi bir açmıyor.

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

İşte (Ben bir payanda ile ok yerine) kullanıyorum HTML snippet'idir:

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

Herhangi bir düşünce?

3 Cevap

Eğer etiketleri eşleşen olmadığından emin misin? Çıkış ne var_dump? Kullanmak ne değer alabilirim var_dump($metaChildren->length)? Sizin kodu burada çalışmak gibi görünüyor:

<?
$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";
}
?>

Çıktıyı verir:

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

Benim tahminim HTML geçerli değil ve $dom->loadHtml çağrısı başarısız olduğunu olurdu. Sahte | Ben bu çağrı true döndürür inanıyorum. Bu gibi pek belki bir şey:

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

Bu ayrıştırıcı size meta etiketleri kapatmak için beklediğini olabilir?

<meta name="name" />

veya

<meta name="name"></meta>