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>