J'ai un code HTML comme ceci: mon code ne fonctionne pas. p> Afficher tout
3 Réponses :
Après avoir regardé l'autre réponse ici, voici une manière inefficace de faire la même chose.
require 'nokogiri'
a = Nokogiri::HTML('<div id="first"><dt>Label1</dt><dd>Value1</dd><dt>Label2</dt><dd>Value2</dd></div>')
dt = []
dd = []
a.css("#first").each do |item|
item.css("dt").each {|t| dt << t.text}
item.css("dd").each {|t| dd << t.text}
end
dt.each_index do |i|
puts dt[i] + ': ' + dd[i]
end
Notez que depuis "# premier" code> ne peut jamais correspondre qu'un seul élément, ce que vous avez est équivalent (mais pire) que: élément = A.AT_CSS ("# premier") code> . Utiliser chaque code> à l'extérieur est entièrement superflu.
Notez également que cette réponse suppose qu'il existe toujours exactement un jumelage 1-1 entre dt.zip (dd). Cherchez {| DT, DD | ...} code> au lieu de chaque_with_index code>.
Tout d'abord, votre HTML doit avoir le code>:
doc = Nokogiri::HTML('<div id="first"><dl>...')
doc.css('#first').search('dt').each do |node|
puts "#{node.text}: #{node.next_element.text}"
end
Au lieu de doc.css ('# premier'). Rechercher ('dt'). Chaque code> pourquoi pas seulement doc.css ('# premier dt'). Chaque code>? Notez également que cette réponse fonctionne sous l'hypothèse selon laquelle il existe toujours une seule et unique-one
@Phrogz: Pas de bonne raison pour .css.search code> autre que, peut-être, il est plus proche de ce que l'OP a déjà. Et j'ai inclus un "qui devrait fonctionner aussi longtemps que la structure correspond à votre exemple" CAVEAT. J'accepterais que votre approche fonctionnerait mieux dans un cas général. (Ceci est juste une correction d'orthographe de mon dernier commentaire Cuz I Dun Haz Gud Speling)
Sous l'hypothèse selon laquelle certains Compte tenu de cette configuration: p> à l'aide d'un peu xpath fort>: p> à lota xpath strong>: p>