Chris Gehlker
8/12/2006 2:23:00 AM
On Aug 11, 2006, at 5:20 PM, why the lucky stiff wrote:
> On Fri, Aug 11, 2006 at 03:19:13AM +0900, Chris Gehlker wrote:
>> If anyone is trying to use Hpricot to clean up the actual content of
>> a site while leaving the markup alone, theymight find the following
>> tiny method useful:
>>
>> class Hpricot::Text
>> # Adds a simple Hpricot method to change
>> # the text embedded in an HTML document
>> #
>> # Example of use:
>> # body.traverse_text do |text|
>> # text_out = text.to_s
>> # manupulate text_out
>> # text.set(text_out)
>> # end
>> def set(string)
>> @content = string
>> self.raw_string = string
>> end
>> end
>
> You can also use Elements#inner_html= and Element#inner_html= for
> this.
>
> (body/:a).inner_html = "New Link Text"
>
> Also: set, html, remove, append, prepend, before, after, and wrap,
> which all
> work just like their JQuery cousins.[1]
Thanks for responding, why: and thanks very much for Hpricot.
I'm a long way from completely understanding Hpricot but I did try to
use inner_html in what I though was the correct way.
Here is a little sample program:
require 'rubygems'
require_gem 'hpricot'
doc = Hpricot(open('TestFile.html'))
body = doc.search('body')
body.each {|elmnt| elmnt.inner_html}
body.inner_html
(body/:a).inner_html = "New Link Text"
puts doc
The output is:
testHpricot.rb:6: undefined method `inner_html' for #<Hpricot::Elem:
0x7546bc> (NoMethodError)
from testHpricot.rb:6:in `each'
from testHpricot.rb:6
If I comment out the body.each... line I get:
testHpricot.rb:7: undefined method `inner_html' for
#<Hpricot::Elements:0x753d48> (NoMethodError)
If I comment out that line, I get:
testHpricot.rb:8: undefined method `inner_html=' for []:Array
(NoMethodError)
What may be related is that the file text.rb is at:
/usr/local/lib/ruby/gems/1.8/gems/hpricot-0.3/lib/hpricot/text.rb
but it is not actually being required anywhere in Hpricot. When i
tried to require it manually, i found that it was requiring files
that gem didn't give me. This is all in Hpricot 0.3.
Thanks again for both your time and Hpricot.
--
Seven Deadly Sins? I thought it was a to-do list!