2011-04-08 69 views
1

我正在使用简单的HTML DOM解析器,并且我想完全忽略“嵌套”元素的内容并获取正在进行的“pre”元素的内容。简单的HTML DOM解析器 - 跳过某些元素

<div id=parent> 

<div class="nested"> 
<pre>Text that I want ignored</pre> 
</div> 

<pre> 
This is the text I want to access 
</pre> 
</div> 

我没有HTML源代码的控制权,并且所有者最近添加了“嵌套”元素。在我访问我需要的内容之前:

$page_contents = file_get_html($url);  
$div_content = $page_contents->find('div[id=parent]pre', 0)->innertext; 

但显然新的嵌套元素已经破坏了我的方法。

我似乎无法找到任何有关这种情况下的官方文档。

+0

好吧,更新我的答案,我可以。 – user 2011-04-08 13:38:19

+0

你为什么不编写一个函数,在id为“parent”的div的子元素之间迭代并忽略那些不是pre的子元素?迭代虽然这些孩子将绕过“我想忽略的文本”,因为它不是母公司的孩子,虽然它们是间接相关的。 – PEdroArthur 2011-04-08 13:48:02

回答

3

未经测试,但尝试这个

$div_content = $page_contents->find('div[id=parent][class!=nested]pre', 0)->innertext; 

$div_content = $page_contents->find('div[id=parent class!=nested]pre', 0)->innertext; 

,或者甚至只是这个我觉得这真的是一个,但我又没有测试

$div_content = $page_contents->find('div[class!=nested]pre', 1)->innertext; 

仍不知道这是否会工作,但试试这个

$div_content = $page_contents->find('div[class!=nested pre]', 0)->innertext; 

$div_content = $page_contents->find('div[class!=nested pre]', 0)->plaintext; 
+0

嗯,第一个和第三个返回“我想忽略的文本”,同时第二个返回错误。 – user 2011-04-08 14:02:07

+0

@Nate Shoffner如果你将0改为1,你会得到正确的结果吗? – mcgrailm 2011-04-08 14:10:40

+0

我只是在文档中查看该参数的用途。是的,它的工作原理。这是文档所说的:“查找第(N)个锚点,返回元素对象,如果没有找到,则返回null(从零开始)” – user 2011-04-08 14:12:07

0

find('div[id=parent] pre')查找所有pre标签中指定div,如果他们中的一个被封闭在另一div不关心,所以继承人几点建议:

,如果你确切地知道哪些pre你想得到,只需指定从零开始计数的数字,在你的情况下:

$div_content = $page_contents->find('div[id=parent] pre', 1)->innertext; 

的情况下,你不知道pre究竟有多少,或者不知道的命令,你可以删除你不想再去做前行的人,但这次指定号码0:

$page_contents->find('div[id=parent] div[id=nested] pre', 0)->outertext = ''; 
$div_content = $page_contents->find('div[id=parent] pre', 0)->innertext; 

并且如果你不想改变$page_contents,只是你父母div分配给一个临时变量,并做如上:

$temp = $page_contents->find('div[id=parent]', 0); 
$temp->find('div[id=nested] pre', 0)->outertext=''; 
$div_content = $temp->find('pre', 0)->innertext; 

ofcourse有很多其他的方法可以做到这一点,应仔细阅读说明书http://simplehtmldom.sourceforge.net/manual.htm虽然它提到只是主要的功能,更多的是在引擎盖下

相关问题