2009-11-19 97 views
1

我有一個包含很多元標記的HTML頁面,我想解析它們以查找某些元素。這裏是我正在使用的代碼,但它沒有拿起任何標籤。PHP DOMDocument GetElementsByTagName未找到元素

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

這裏是我使用的(我替換梅開二度的箭頭)的HTML的一個片段:

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

什麼想法?

+0

你可以發佈你試圖匹配HTML的樣本。我想知道你是否有姓名屬性。 – MrChrister 2009-11-19 19:38:34

回答

1

你確定標籤沒有被匹配嗎? var_dump的輸出是多少?當您使用var_dump($metaChildren->length)時,您會獲得什麼價值?你的代碼似乎在這裏工作:

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

給出輸出:

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

我的猜測是HTML無效,並且$dom->loadHtml調用失敗。我相信這個調用返回true | false。所以也許是這樣的:

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

我沒有意識到它必須是有效的html – jkushner 2009-11-19 19:44:56

+0

它實際上載入了正確的 – jkushner 2009-11-19 19:46:12

+0

,看了看文檔,你是對的。我習慣於使用XML解析器。不管是哪種情況,在繼續之前檢查加載是否成功都是一個好主意。 – jaywon 2009-11-19 19:46:20

0

會不會是解析器希望你關閉meta標籤?

<meta name="name" /> 

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