Pregunta

Quiero usar nokogiri a bucle a través de un html y crear un objeto que corresponde a cada fila. Soy capaz de definir los XPath raíz en el que necesito los datos para rellenar el objeto varibles proviene de pero no sé cómo agrupar estos como un objeto.

Mi código está por debajo. Sé que no funciona pero no sé qué dirección tomar para hacer que funcione.

require '' rubygems require 'nokogiri'

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

poste de la clase      def inicializar (v1, v2, v3)             @ V1 = v1             @ V2 = v2             @ V3 = v3       final

  def v1= (v1)
    @v1 =v1
  end

  def v2
    @v2 =v2
  end

  def v3
    @v3 =v3
  end

end

PostList clase         def inicializar           @posts = Array.new         final

    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 ( 'cuerpo'). Primero

obtiene los contects de la fila

parent.xpath ( "// div / tabla [clase @ = 'ipbtable'] / tr") .Cada hacer | a_tag |

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

a_tag.xpath ( "td [1]") cada uno haga |. X_tag |

pone x_tag.content

end

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

end

¿Fue útil?

Solución

El principal problema con el código parece ser que está pasando cuerdas ('K1', 'K2', 'K3') que recuerdan vagamente a los nombres de las variables en lugar de los propios (k1, k2, k3) variables. Sin embargo, se podría expresar esto más sucintamente como:

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

Esto simplemente bucles sobre cada fila y crea un mensaje con el contenido textual de cada td en la fila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top