2012-04-02 7 views
1
require 'net/http'; require 'libxml' 

data = Net::HTTP.get_response(URI.parse('http://myurl.com')).body 
source = LibXML::XML::Parser.string(data).parse 

tables = source.find('//table') 

kehrtZugriff auf XPath Abfrage-Ergebnisse, wenn alle, die zurückgegeben wird, ist ein LibXML Objekt in Ruby

=> #<LibXML::XML::XPath::Object:0x1f4f50> 

Wie kann ich diese zugreifen? Dort sind mindestens 11 Tische.

p.s. Ich kann Nokogiri nicht in meinem aktuellen Setup verwenden.

Antwort

1

Sie greifen auf die XPath-Ergebnisse zu, indem Sie nach dem Knotenelement wie diesem fragen.

require 'net/http' 
require 'libxml' 

# Sample text with a few tables 
xml=<<END 
<html> 
    <table id="t1"><tr><td>foo</td></tr></table> 
    <table id="t2"><tr><td>goo</td></tr></table> 
    <table id="t3"><tr><td>hoo</td></tr></table> 
</html> 
END 

# Parse the text into tables 
source = LibXML::XML::Parser.string(xml).parse 
tables = source.find('//table') 

# The XPath #each iterator does each XML node 
tables.each {|node| 
    puts node["id"] 
} 

Wenn Sie eine ältere Version von libxml haben:

- puts node["id"] 
+ puts node.property("id") 
+0

1.9.2p318: 013> tables.each {| node | setzt den Knoten ["id"]} => null 1.9.2p318: 014> tables.each {| node | setzt node ["class"]} => nil Scheint nicht zu funktionieren :( – LittleBobbyTables

+0

Matthew, können Sie weitere Informationen zur Verfügung stellen? Was passiert, wenn Sie es ausführen? Der Code oben läuft auf meinem Setup (Ruby 1.9.3, libxml-ruby 2.3.2, Ubuntu 11.10) Versuchen Sie es mit node.property - Ich habe diese Information nur zur Antwort hinzugefügt – joelparkerhenderson

+0

Ich habe versucht, Ihren genauen Code (mit dem HTML-Code), der funktioniert :) aber jetzt versuchen, Code zu importieren von einer echten Webseite wie: http://en.wikipedia.org/wiki/The_Beatles - es gibt nil zurück :(- so komisch! – LittleBobbyTables

Verwandte Themen