كيفية حلقة من خلال طاولة وتحويل الصفوف إلى كائنات باستخدام Nokogiri

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

  •  12-09-2019
  •  | 
  •  

سؤال

أريد استخدام Nokogiri للحلاقة من خلال HTML وإنشاء كائن يقابل لكل صف. أنا قادر على تحديد Xpaths الجذر حيث أريد أن تعطل البيانات لملء أدوات الكائنات ولكنني لا أعرف كيفية تجميع هذه كائن كائن.

الرمز الخاص بي أدناه. أعلم أنه لا يعمل لكنني لا أعرف أي اتجاه للذهاب لجعله يعمل.

تتطلب "Rubygems" تتطلب "Nokogiri"

Doc = Nokogiri :: html.parse (<< - html_end) "LV1LV2LV3 MV1MV2MV3 NV1NV2NV3" HTML_END

الفئة وظيفة def تهيئة (v1، v2، v3) @ v1 = v1 @ v2 = v2 @ v3 = v3 نهاية

  def v1= (v1)
    @v1 =v1
  end

  def v2
    @v2 =v2
  end

  def v3
    @v3 =v3
  end

نهاية

الفئة postlist def تهيئة posts = array.new نهاية

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

    def deleteFirst
      @posts.shift
    end

    def deleteLast
      @posts.pop
    end

نهاية

قائمة = postlist.new.

الوالد = Doc.css ('الجسم'). أولا

يحصل على مواقع الصف

Parent.xpath ("// div / table [@ class = 'iPBTABLE'] / tr"). كلا do | a_tag |

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

a_tag.xpath ("TD [1]). كل تفعل | x_tag |

يضع x_tag.content.

نهاية

list.append (post.new (k1، k2، k3))

نهاية

هل كانت مفيدة؟

المحلول

يبدو أن المشكلة الرئيسية في التعليمات البرمجية هي أنك تمر سلاسل ('K1', 'K2', 'K3') يشبه غامضة أسماء المتغيرات بدلا من المتغيرات نفسها (k1, k2, k3). ومع ذلك، يمكنك التعبير عن هذا أكثر إيجازا على النحو التالي:

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

هذه الحلقات ببساطة على كل صف وإنشاء منشور باستخدام المحتوى النصي لكل TD في الصف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top