2012-02-08 3 views
0

J'ai un NodeSet d'une table qui ressemble à ceci:XPATH - Ruby - Nokogiri - NodeSet

<table cellpadding="1" cellspacing="0" width="100%" border="0"> 
    <tr> 
     <td colspan="9" class="csoGreen"><b class="white">Bill Statement Detail</b></td> 
    </tr> 
    <tr> 
     <td><b>Bill Date</b></td> 
     <td"><b>Bill Amount</b></td> 

     <td"><b>Bill Due Date</b></td> 
     <td"><b>Bill (PDF)</b></td> 
    </tr> 

<tr vAlign="top"> 
    <td>blahA</td> 
    <td>blahB</td> 
    <td>blahC</td> 

    <td><a href="javascript: void(0);" onclick="javascript:window.open('/cso/displaypdfbill?selectedBillkey=447403730','_blank');">View Bill</a></td> 
</tr> 

maintenant sur plan que je boucle à travers chaque onclick dans le tableau.

J'ai essayé de faire une boucle sur le NodeSet sans succès.

J'ai fini avec beaucoup de tentatives infructueuses, mais j'imagine que ce serait finir par quelque chose comme ceci:

doc_list.each_element ("//a[td/text()='onclick']/@href") do | | 
     #here I want to scan and save BlahA into a Variable 
end 
+1

Que voulez-vous exactement extraire du HTML? –

+0

Je veux extraire les données blaA – user1198316

Répondre

0

Vous voulez itérer tout avec un onclick? Peut-être:

doc.css('*[onclick]').each do |el| 
    puts el[:onclick] 
end 

Edit: ce que vous probablement vraiment voulez est la première td de chaque ligne commençant par la ligne 3. Dans ce cas:

table.css('td[1]')[2..-1].each do |td| 
    puts td.text 
end 
+0

oui je veux itérer à travers tout et que le code fonctionne, mais je veux extraire le premier td dans le tr où il y a un onclick. Cela ne fonctionne pas mais quelque chose comme ça: 'doc_list.css ('[onclick]'). Each do | el | met doc_list.xpath ("// tr/td [contient (texte()," onclick ")]"). Texte end' – user1198316

+0

dans ce cas: el.parent.parent.at ('td'). Text – pguardiario

0

La clé de cette action efficace n'est pas dans votre question, mais dans votre commentaire "Je veux extraire le premier td dans le tr où il y a un onclick".

Cette expression fait exactement cela:

doc.xpath('//tr[td/a/@onclick]/td[1]/text()') 

En fait, cela vous donnera l'ensemble de tous ces matchs. Aucune itération nécessaire.