【问题标题】:extracting nodevalue from a DOM tree从 DOM 树中提取节点值
【发布时间】:2011-11-25 20:44:26
【问题描述】:

我希望下面的代码回显在装备元素中找到的字符串。
这不应该工作吗?

<?

    $doc = new DOMDocument();
    $doc->loadHTML('http://website.com');

    $elements = $doc->getElementByID("equipped");

     echo $elements->nodeValue . "\n";



    ?>

【问题讨论】:

  • 我尝试了几种不同的元素.. div 和 spans 主要是虽然
  • 不应该是loadHTMLFile吗?

标签: php html parsing screen-scraping web-scraping


【解决方案1】:

在使用DOMDocument::getElementById() 时,我建议您将属性validateOnParse 设置为true,以确保文档格式正确并且该方法可以正常工作。

如果节点的内容只有文本,可以试试textContent属性。 nodeValue 属性值可能因元素类型而异。

看起来像这样:

<?php
    $doc = new DOMDocument();
    $doc->validateOnParse = true;
    $doc->loadHTMLFile('http://website.com');
    $element = $doc->getElementById("equipped");

    if (!is_null($element)) {
        $content = $element->nodeValue;

        if (empty($content)) {
            $content = $element->textContent;
        }

        echo $content . "\n";
    }
?>

希望对你有帮助。

【讨论】:

  • 似乎应该可以工作,但事实并非如此。我想知道在我们回显值之前是否可以查看数组是否为空
  • 问题是getElementById() 方法返回单个元素。它抛出任何异常吗?您的错误日志中有什么内容吗?
  • 您可以在 PHP 安装中检查的更多内容:是否启用了 libxml?错误是否配置为正确记录?
  • @fardjad 你是对的!它必须是loadHTMLFile()。否则,您需要在要解析的字符串中提供 HTML 源代码。刚刚更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多