【问题标题】:Trying to traverse the HTML DOM structure using PHP?尝试使用 PHP 遍历 HTML DOM 结构?
【发布时间】:2011-06-20 21:07:30
【问题描述】:
$p = new DOMDocument();
echo $data;
$static = $p->loadHTML($data);
$static = $static->getElementByTagName("html")->item(0);
$static = $static->getElementByTagName("body")->item(0);
$static = $static->getElementByTagName("table")->item(0);
$static = $static->getElementByTagName("tr")->item(0);
$static = $static->getElementByTagName("td")->item(0);
$static = $static->getElementByTagName("table")->item(0);
$static = $static->getElementByTagName("tr")->item(5);
$static = $static->getElementByTagName("td")->item(1);
$static = $static->getElementByTagName("div")->item(0);
$static = $static->getElementByTagName("table")->item(0);
$static = $static->getElementByTagName("tr")->item(0);
$static = $static->getElementByTagName("td")->item(0);
$static = $static->etElementByTagName("center")->item(0);
echo $static;

这就是我上面的代码,我不确定我是否做得正确,但它似乎是正确的(我试图基本上通过结构来找到我需要的确切部分)。但是我不断收到此错误:

致命错误:在第 18 行的 blah 中调用非对象上的成员函数 getElementByTagName()

(第 18 行是第一个“getElementByTagName”)

如果与此有关,我也会收到这些错误:

警告:DOMDocument::loadHTML() [domdocument.loadhtml]:打开和 结束标签不匹配:td 和 center in 实体,行:83 英寸 第 17 行

警告:DOMDocument::loadHTML() [domdocument.loadhtml]:打开和 结束标签不匹配:td 和 center in 实体,行:83 英寸 第 17 行

警告:DOMDocument::loadHTML() [domdocument.loadhtml]:打开和 结束标签不匹配:td 和 center in 实体,行:87 英寸 第 17 行

警告:DOMDocument::loadHTML() [domdocument.loadhtml]:意外结束 标记:实体中的 div,行:91 中 第 17 行

但是是的,有人可以帮忙吗?

【问题讨论】:

    标签: php dom


    【解决方案1】:

    首先,修复您的 HTML,使其对这些错误有效。然后做DOM处理。

    你也可以使用 DOMXpath 来做

    ->evaluate('/body/table/tr/td/table/tr/td/div/table/tr/td/center')
    

    或者你可以只做->evaluate('//center') 并获取所有center 元素。

    你的 HTML 有效。你也可以给那个center 元素一个id。理想情况下,您应该永远不要使用中心元素。

    【讨论】:

    • 啊,我从一个站点获取数据,所以我个人无法改变它。虽然我摆脱了 html 错误,但它仍然在这样做。然而,现在这并不重要,因为它看起来完全可以满足我的需要。感谢您的快速响应:)
    • 好吧,现在看来我遇到了同样的错误,只是奇怪地评估了在非对象中调用成员函数评估()
    【解决方案2】:

    您将函数名称输入错误为getElementByTagName。正确的函数名称是getElementsByTagName。当我用这个更正重复你的代码时,它工作正常。

    【讨论】:

      【解决方案3】:

      记录在案:

      有时我们无法修复格式错误的文档。
      我们可以使用@(错误控制)运算符阻止这些警告。

      $static = @$p->loadHTML($data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多