Hpricot and xpath

L

Li Chen

Hi all,

I want to find the path to a tag I am interested using hpricot.
According to the document and examples I think I should use #xpath
method.

I expect that ruby will return the path as this:
"/tag1/tag2/div[@id='header']"

but I get the following info:

tag1.rb:4: undefined method `xpath' for nil:NilClass (NoMethodError)

I wonder why method #xpath is not defined?

Thanks,

Li


###########################################
Here is my code:

require 'hpricot'
doc=Hpricot(open('tag.txt'))
puts doc
puts doc.at("header").xpath()


########tag.txt##########
<tag1>
<tag2>
<div id='header'>
</tag2>
</tag1>
 
M

Mark Thomas

Hi all,

I want to find the path to a tag I am interested using hpricot.
According to the document and examples I think I should use #xpath
method.

I expect that ruby will return the path as this:
"/tag1/tag2/div[@id='header']"

but I get the following info:

tag1.rb:4: undefined method `xpath' for nil:NilClass (NoMethodError)

I wonder why method #xpath is not defined?

Look carefully. It's not defined for nil. Which means that
doc.at("header") is returning nil. That's because there are no
elements with the name of "header"; only an attribute. Try using the
css selector "#header".
 
L

Li Chen

Mark said:
Look carefully. It's not defined for nil. Which means that
doc.at("header") is returning nil. That's because there are no
elements with the name of "header"; only an attribute. Try using the
css selector "#header".


Here is the result after I change to css selector or xpath;

puts doc.at("#header").xpath()

ag1.rb:4: undefined method `xpath' for {elem <div id="header"> {text "
\n" " "}}:Hpricot::Elem (NoMethodError)


puts doc.at("#header").css_path()

tag1.rb:4: undefined method `css_path' for {elem <div id="header"> {text
" \n" " "}}:Hpricot::Elem (NoMethodError)



Li
 
M

Mark Thomas

Are you using an old version of Hpricot? When I run this code:

#!/usr/bin/env ruby
require 'rubygems'
require 'hpricot'
doc = Hpricot(open("tag.txt"))
puts doc.at("#header").xpath

I get the following result:
//div[@id='header']

I'm using Hpricot 0.6 (do a gem list --local to see your version)
 
L

Li Chen

Mark said:
Are you using an old version of Hpricot? When I run this code:

#!/usr/bin/env ruby
require 'rubygems'
require 'hpricot'
doc = Hpricot(open("tag.txt"))
puts doc.at("#header").xpath

I get the following result:
//div[@id='header']

I'm using Hpricot 0.6 (do a gem list --local to see your version)

My version is 0.4. Since I can not install the new version remotely.
I want to install it locally. But I can't find hpricot gem in Rubyfore.


Li
 
L

Li Chen

Li said:
My version is 0.4. Since I can not install the new version remotely.
I want to install it locally. But I can't find hpricot gem in Rubyfore.

Thank you all for the help.Now it works after install to the 0.6
version.


Li
 
L

Li Chen

Hi all,

I find that in my code 'xpath' only works if the attribute is 'id'. How
to explain it?

Another question: is it possible to get the path/tree relationship of a
tag(including its attributes)in the following format using hpricot or
the position of an interested tag within a html page/file:

tag1/tag2/<div class="header">

Thanks,

Li


###############tag.txt#######################
#I change id="header" to class="header"
<tag1>
<tag2>
<div class="header">ABC </div>
</tag2>
 
P

Phlip

tag1.rb:6: undefined method `xpath' for nil:NilClass (NoMethodError)

Do you see the nil in that line? Where is the nil coming from? Is the method
before the .xpath, on line 6, possibly returning a nil and not an Elem?

After pondering that, switch '#header' to '.header'!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Hpricot and path of an elememt 2
Hpricot and XML 0
hpricot selective text modification 3
Hpricot inner_html 1
inner_html = "" in hpricot 0
Hpricot question 1
Hpricot Help 0
hpricot parsing 5

Members online

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top