Come collegare attraverso una tabella e girare righe in oggetti utilizzando nokogiri

StackOverflow https://stackoverflow.com/questions/1115478

  •  12-09-2019
  •  | 
  •  

Domanda

voglio usare nokogiri il ciclo in un html e creare un oggetto corrispondente a ogni riga. Sono in grado di definire le XPaths radice dove voglio i dati per riempire l'oggetto varibles viene da ma non so come raggruppare questi come un oggetto.

Il mio codice è sotto. Lo so che non funziona, ma non so quale direzione andare per farlo funzionare.

require 'RubyGems' require 'nokogiri'

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

class Messaggio      def inizializzazione (v1, v2, v3)             @ V1 = v1             @ V2 = v2             @ V3 = v3       end

  def v1= (v1)
    @v1 =v1
  end

  def v2
    @v2 =v2
  end

  def v3
    @v3 =v3
  end

end

PostList classe         DEF inizializzare           @posts = Array.new         end

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

    def deleteFirst
      @posts.shift
    end

    def deleteLast
      @posts.pop
    end

end

list = PostList.new

parent = doc.css ( 'body'). Prima

ottiene visualizzato il contenuto della riga

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

k1 = "x" k2 = "x" k3 = "x"

a_tag.xpath ( "td [1]") ogni do |. X_tag |

mette x_tag.content

end

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

end

È stato utile?

Soluzione

Il problema principale con il codice sembra essere si sta passando stringhe ('K1', 'K2', 'K3') che ricordano vagamente i nomi delle variabili, piuttosto che le variabili stesse (k1, k2, k3). Tuttavia, si potrebbe esprimere questo più brevemente come:

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

Questo loop semplicemente sopra ogni riga e crea un messaggio utilizzando il contenuto testuale di ogni TD nella riga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top