I can't comment on the error, but you can delete a given node in your
traverse_element block by doing node.parent.children.delete(node).

Alternatively, you can run a search first to remove the "really bad
elements."  If you define really bad elements in terms of an xpath
query, this becomes very simple:

  (doc/"script").remove

Then you can go through and swap things out as necessary:

 (doc/"xpath to bad nodes").each do |el|
  el.inner_html = "<!-- #{el.to_html} -->"
 end

On May 21, 8:04 pm, "Daniel N" <has.... / gmail.com> wrote:
> Hi,
>
> Sorry if this is not the right forum for this question.
>
> If a node is bad I'm trying to comment it out.   If it's really bad
> I'm trynig to delete it.
>
> The way I'm trying to do is is as follows.
>
> def this_is_a_problem
>   doc = Hpricot( html )
>   doc.traverse_element do |node|
>   if some_bad_node_test
>     unless really_bad?
>      node.swap( "<!-- comment out node #{node.to_html} -->" )
>     else
>        node.swap( "" )
>     end
>   end
>   doc.to_html
> end
>
> However I'm getting a nasty error.
>
> TypeError: no implicit conversion from nil to integer
>     /usr/local/lib/ruby/gems/1.8/gems/hpricot-0.5/lib/hpricot/traverse.rb:395:in
> `[]='
>
> Am I doing this the wrong way?
>
> Thanx
>
> Daniel