2011-06-04 98 views
1

我想从this page中提取只有一个具有id=MainText的div元素。然而,当我这个页面的内容加载到DOM对象,我得到几个错误:使用DomDocument获取元素在破损的HTML页面上使用DomDocument

 
Tag g:plusone invalid... 
Unexpected end tag... 
htmlParseEntityRef: no name ... 
htmlParseEntityRef: expecting ';' ... 

所以,我在想,如果有可能从文档忽略所有其他的东西而直接进入到第一部分只需要获取具有该特定ID的div元素即可。

或者,有没有其他的使用domdocument类来实现相同的目的?我不擅长写正则表达式。

+0

*“当我加载此页面的内容时”* - 您是如何做到这一点的? – Tomalak 2011-06-04 16:25:05

+0

@Tomalak:我还没有决定如何去做。仅出于测试目的,我下载了该页面并将其放在本地文件夹中,然后使用了loadHTMLFile方法 – fabio 2011-06-05 16:01:23

回答

0

切勿在HTML中使用RegEx。

坚持使用DOMDocument,如果不会导致进一步的问题,可能会抑制错误。

+0

在调用“loadHTML”方法之前,我已经抑制了错误并放置了一个“@”。这里发生的情况是,某些内容会像“div id = MainTxt”元素一样丢失 - 这是我需要提取的确切内容。 – fabio 2011-06-05 16:07:06

2

w3c验证程序在快速运行时会吐出很多错误。尝试使用这种方法清理html,然后将其提供给DomDocument:

#Assuming that $html is your html source (retrieve it as you prefer) 
$tidy = new tidy; 
$tidy->parseString($html, $config, 'utf8'); 
$tidy->cleanRepair(); 

$document = new DOMDocument(); 
$document->loadHTML((string)$tidy); 
+0

我在哪里可以找到这个“整洁”课程?我在这里测试了代码,并且php使用这个类不存在。 – fabio 2011-06-05 16:04:01

+0

@fabio:http://www.php.net/manual/en/tidy.installation.php(谷歌,第一次打击,认真。) – Tomalak 2011-06-05 16:14:14