PHP DOMDocument GetElementsByTagName无法查找元素

时间:2009-11-19 19:36:46

标签: php dom metadata

我有一个包含很多元标记的HTML页面,我想解析它们以找到某些元标记。这是我正在使用的代码,但它没有拿起任何标签。

$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"]  

任何想法?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我的猜测是HTML无效且$dom->loadHtml调用失败。我相信该调用返回true | false。也许是这样的:

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

答案 2 :(得分:0)

是否解析器希望您关闭元标记?

<meta name="name" />

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