试图使用PHP遍历HTML dom结构?

时间:2011-02-03 18:27:00

标签: php dom

$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和居中   实体,行:83英寸   第17行

     

警告:DOMDocument :: loadHTML()   [domdocument.loadhtml]:开场和   结束标记不匹配:td和居中   实体,行:83英寸   第17行

     

警告:DOMDocument :: loadHTML()   [domdocument.loadhtml]:开场和   结束标记不匹配:td和居中   实体,行:87英寸   第17行

     

警告:DOMDocument :: loadHTML()   [domdocument.loadhtml]:意外结束   tag:div in Entity,line:91 in   第17行

但是,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

首先,修复HTML,使其符合这些错误。然后做DOM处理。

您也可以使用DOMXpath并执行

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

或者你可以->evaluate('//center')抓住所有center元素。

之后

您的HTML有效。您还可以为center元素指定一个id。理想情况下,你应该从不使用中心元素。

答案 1 :(得分:3)

您错误地将函数名称输入为getElementByTagName。正确的函数名称为getElementsByTagName。当我使用此更正重复您的代码时,它可以正常工作。

答案 2 :(得分:3)

记录:

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

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