PHP DOMDocument GetElementsByTagName 未找到元素

发布于 2024-08-12 01:22:57 字数 525 浏览 3 评论 0原文

我有一个包含大量元标记的 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"]  

有什么想法吗?

I have an HTML page containing alot of meta tags and I want to parse them to find certain ones. Here is the code I am using, but it's not picking up any of the tags.

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

Here is a snippet of the HTML I am using (I replaced the arrow with a brace):

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

Any Ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萤火眠眠 2024-08-19 01:22:57

您确定标签不匹配吗? 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

Are you sure the tags aren't being matched? What is the output of var_dump? What value do you get when you use var_dump($metaChildren->length)? Your code seems to work here:

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

Gives output:

GZPlatform= pc
GZFeatured= Gone Gold
GZHeadline= pc
GZP_ID= pc 21153
残花月 2024-08-19 01:22:57

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

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

My guess would be that the HTML is not valid and that the $dom->loadHtml call is failing. I believe that call returns true|false. So maybe something like this:

if($dom->loadHtml($contents)){
    $metaChildren = $dom->getElementsByTagName('meta');
}else{
    //handle properly
}
沫尐诺 2024-08-19 01:22:57

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

<meta name="name" />

或者

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

COuld it be that the parser expects you to close the meta tags?

<meta name="name" />

or

<meta name="name"></meta>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文