2009-06-29 51 views
1

我想從不符合某些條件(class =「int」或class =「ext」)的HTML頁面(實際上是tinymce用戶輸入)中刪除所有圖像,並且我正在使用正確的方法。這就是我在做什麼至今:Hpricot元素交叉點

hbody = Hpricot(input) 
@internal_images = hbody.search("//img[@class='int']") 
@external_images = hbody.search("//img[@class='ext']") 

但我不知道如何找到圖像所在班級有錯誤的值(不是「內部」或「外部」)。

我還必須遍歷元素來檢查其他屬性,這些屬性不是標準的html(我用它們來設置內部值,比如我在屬性dbsrc中設置的DB ID)。我是否也可以訪問這些屬性,並且在他們不符合我的標準時是否有辦法刪除某些元素(位於hpricot搜索結果中)?

感謝您的幫助!

回答

3
>> doc = Hpricot.parse('<html><img src="foo" class="int" /><img src="bar" bar="42" /><img src="foobar" class="int"></html>') 
=> #<Hpricot::Doc {elem <html> {emptyelem <img class="int" src="foo">} {emptyelem <img src="bar" bar="42">} {emptyelem <img class="int" src="foobar">} </html>}> 
>> doc.search("img")[1][:bar] 
=> "42" 
>> doc.search("img") - doc.search("img.int") 
=> [{emptyelem img src"bar" bar"42"}] 

一旦你有搜索結果,你可以使用正常的數組操作。非標準屬性可通過[]訪問。

+0

哇,很容易,所以我可以使用「collection_one - collection_two」從collection_one中刪除collection_two中的所有元素?謝謝! – 2009-06-29 15:01:20

+0

重要提示,在'z = x - y'之後,x不會改變,z只會包含所有不在y中的x。 – rampion 2009-06-29 15:09:18

2

查看not CSS selector

(hbody."img:not(.int)") 
(hbody."img:not(.ext)") 

不幸的是,它似乎並不能連接表達式。您可能想要獲取所有img節點,並刪除那些.css選擇器既不包含.int也不包含.ext的節點。 此外,您可以使用差異運算符來計算哪些元素不是兩個集合的一部分。

使用.remove方法刪除節點或元素:Hpricot Altering文檔。