2009-07-12 8 views
1

Je veux utiliser nokogiri pour faire une boucle dans un fichier html et créer un objet correspondant à chaque ligne. Je suis capable de définir les xpaths racine où je veux que les données remplissent les variables d'objet mais je ne sais pas comment les regrouper en tant qu'objet.Comment faire une boucle dans une table et transformer des lignes en objets en utilisant nokogiri

Mon code est ci-dessous. Je sais que cela ne fonctionne pas mais je ne sais pas dans quelle direction aller pour le faire fonctionner.

require 'rubygems' require 'nokogiri'

doc = Nokogiri :: HTML.parse (< < -HTML_END) " LV1LV2LV3 MV1MV2MV3 NV1NV2NV3 " HTML_END

classe post def initialize (v1, v2, v3) @ v1 = v1 @ v2 = v2 @ v3 = v3 fin

def v1= (v1) 
    @v1 =v1 
    end 

    def v2 
    @v2 =v2 
    end 

    def v3 
    @v3 =v3 
    end 

fin

classe PostList def initialiser @posts = Array.new fin

def append(aPost) 
     @posts.push(aPost) 
     self 
    end 

    def deleteFirst 
     @posts.shift 
    end 

    def deleteLast 
     @posts.pop 
    end 

extrémité

list = PostList.new

parent = doc.css ('corps'). Première

obtient les contects de la rangée

parent.xpath (» // div/table [@ class = 'ipbtable']/tr ") .chaque do | a_tag |

k1 = "x" K2 = "x" k3 = "x"

a_tag.xpath ("td [1]") chaque FAISONS |. X_tag |

met x_tag.content

fin

list.append (Post.new (k1, k2, k3))

fin

Répondre

3

Le principal problème avec le code semble être vous passez des chaînes ('K1', 'K2', 'K3') qui ressemblent vaguement aux noms des variables plutôt qu'aux variables elles-mêmes (k1, k2, k3). Cependant, vous pouvez exprimer plus succinctement:

doc.search('table > tr').each do |row| 
    properties = row.search('td/text()').collect {|text| text.to_s} 
    list.append Post.new(*properties) 
end 

Cette boucles simplement sur chaque ligne et crée un message en utilisant le contenu textuel de chaque td de la ligne.

+0

Merci beaucoup. –