与引入nokogiri解析成其中存在在某一列
林试图解析标签不与引入nokogiri一个表中的每个小区的多个标签的表,其中有多于一个仅在一个TD字段:与引入nokogiri解析成其中存在在某一列
<tr class="alt2">
<td class="company">ABB Shanghai Transformer Co., Ltd.</td>
<td class="contactperson">Mr. Frank Liang<br/></td>
<td class="businesscategory">
<label><code>C27.11 </code>Manufacture of electric motors, generators and transformers</label>
<label><code>C27.33 </code>Manufacture of wiring devices</label>
</td>
</tr>
所以,我现在所做的是这样的:
doc.css("tbody tr").each do |company|
new = GermanSubsidiary.new
new.name = company.at_css(".company").text
new.contact = company.at_css(".contactperson").text
company.at_css(".businesscategory label").each do |category|
new_class = BusinessClassification.create
new_class.code = category.at_css("code").text
new_class.name = category.text
end
end
不幸company.at_css(".businesscategory label").each do |category|
不工作,因为at_css不数组工作...是什么呢?
我该如何深入分析结构?由于有多行表格,我必须在女巫行的目标中加以区分,并且不能在整个文档中使用xpath命令。
由于马库斯
.at_css('.businesscategory label')
仅返回第一个匹配节点。使用.css('.businesscategory label')
得到所有匹配的节点
这个XML
xml = <<-XML
<tbody>
<tr class="alt2">
<td class="company">ABB Shanghai Transformer Co., Ltd.</td>
<td class="contactperson">Mr. Frank Liang<br/></td>
<td class="businesscategory">
<label><code>C27.11 </code>Manufacture of electric motors, generators and transformers</label>
<label><code>C27.33 </code>Manufacture of wiring devices</label>
</td>
</tr>
</tbody>
XML
这个脚本
require 'rubygems'
require 'nokogiri'
require 'pp'
doc = Nokogiri::HTML.fragment(xml)
puts "with at_css example:"
doc.css("tbody tr").each do |company|
company.at_css(".businesscategory label").each do |category|
puts category.at_css("code").text
puts category.text
end
end
puts "\n\nwith css"
doc.css("tbody tr").each do |company|
company.css(".businesscategory label").each do |category|
puts category.at_css("code").text
puts category.text
end
end
打印这个结果
with at_css example:
with css
C27.11
C27.11 Manufacture of electric motors, generators and transformers
C27.33
C27.33 Manufacture of wiring devices
所以,你可以看到,使用.css
而不是.at_css
将解决您的问题。
使用.at_css('.businesscategory').children
将产生空白节点,所以一定要小心
puts "\n\nwith at_css().children"
doc.css("tbody tr").each do |company|
company.at_css(".businesscategory").children.each do |category|
puts category.text.inspect
end
end
打印
with at_css().children
"\n "
"C27.11 Manufacture of electric motors, generators and transformers"
"\n "
"C27.33 Manufacture of wiring devices"
"\n "
没有帮助...试过了,但是company.at_css(“。businesscategory”)。children did it ... – Markus 2012-03-29 18:28:39
小心,'.children'会返回所有孩子,即使是不是元素的孩子,包括空白的文本节点。 – 2012-03-29 18:42:21
.at_css('.businesscategory label')
仅返回第一个匹配节点。使用.css('.businesscategory label')
得到所有匹配的节点
这个XML
xml = <<-XML
<tbody>
<tr class="alt2">
<td class="company">ABB Shanghai Transformer Co., Ltd.</td>
<td class="contactperson">Mr. Frank Liang<br/></td>
<td class="businesscategory">
<label><code>C27.11 </code>Manufacture of electric motors, generators and transformers</label>
<label><code>C27.33 </code>Manufacture of wiring devices</label>
</td>
</tr>
</tbody>
XML
这个脚本
require 'rubygems'
require 'nokogiri'
require 'pp'
doc = Nokogiri::HTML.fragment(xml)
puts "with at_css example:"
doc.css("tbody tr").each do |company|
company.at_css(".businesscategory label").each do |category|
puts category.at_css("code").text
puts category.text
end
end
puts "\n\nwith css"
doc.css("tbody tr").each do |company|
company.css(".businesscategory label").each do |category|
puts category.at_css("code").text
puts category.text
end
end
打印这个结果
with at_css example:
with css
C27.11
C27.11 Manufacture of electric motors, generators and transformers
C27.33
C27.33 Manufacture of wiring devices
所以,你可以看到,使用.css
而不是.at_css
将解决您的问题。
使用.at_css('.businesscategory').children
将产生空白节点,所以一定要小心
puts "\n\nwith at_css().children"
doc.css("tbody tr").each do |company|
company.at_css(".businesscategory").children.each do |category|
puts category.text.inspect
end
end
打印
with at_css().children
"\n "
"C27.11 Manufacture of electric motors, generators and transformers"
"\n "
"C27.33 Manufacture of wiring devices"
"\n "
没有帮助...试过了,但是company.at_css(“。businesscategory”)。children did it ... – Markus 2012-03-29 18:28:39
小心,'.children'会返回所有孩子,即使是不是元素的孩子,包括空白的文本节点。 – 2012-03-29 18:42:21
的解决方案是:company.at_css( “businesscategory”)儿童 – Markus 2012-03-29 16:15:13
'company'不是数组,它是一个'
回答
.at_css('.businesscategory label')
仅返回第一个匹配节点。使用.css('.businesscategory label')
得到所有匹配的节点这个XML
这个脚本
打印这个结果
所以,你可以看到,使用
.css
而不是.at_css
将解决您的问题。使用
.at_css('.businesscategory').children
将产生空白节点,所以一定要小心打印
没有帮助...试过了,但是company.at_css(“。businesscategory”)。children did it ... – Markus 2012-03-29 18:28:39
小心,'.children'会返回所有孩子,即使是不是元素的孩子,包括空白的文本节点。 – 2012-03-29 18:42:21
相关问题