2011-04-08 66 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雖然它提到只是主要的功能,更多的是在引擎蓋下

相關問題