كيفية حلقة من خلال طاولة وتحويل الصفوف إلى كائنات باستخدام Nokogiri
سؤال
أريد استخدام 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 في الصف.