我正在使用Simple HTML DOM Parser,我想完全忽略“嵌套”元素的内容,并获取正在进行的“pre”元素的内容。
<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 :(得分: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;
答案 1 :(得分: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;
当然还有很多其他方法可以做到这一点,应该阅读手册http://simplehtmldom.sourceforge.net/manual.htm虽然它只提到了主要功能,但更多的是在引擎盖下