Ruby 如何获取';th';使用Nokogiri的元素
我有以下HTML代码,需要使用Ruby 如何获取';th';使用Nokogiri的元素,ruby,nokogiri,Ruby,Nokogiri,我有以下HTML代码,需要使用id确定“字符串数”的索引。我使用Nokogiri解析HTML并获取行 doc = Nokogiri::parse(myfile.html) table = doc.xpath("//span[@id='NumStrs']/../../..") row = table.xpath["tr[1]"] 以下是HTML: <tr> <th id ="langframe"> <span id="cabinet"> Cabinet<
id确定“字符串数”的索引。我使用Nokogiri解析HTML并获取行
doc = Nokogiri::parse(myfile.html)
table = doc.xpath("//span[@id='NumStrs']/../../..")
row = table.xpath["tr[1]"]
以下是HTML:
<tr>
<th id ="langframe">
<span id="cabinet">
Cabinet</span>
</th>
<th id ="langbb1">
<span id="bb1">
BB1</span>
</th>
<th id ="langbb2">
<span id="bb2">
BB2</span>
</th>
<th id ="langtemp">
<span id="Temp">
Temperature</span>
</th>
<th id="langstrs">
<span id="StringsPresent">
Strings Present</span>
</th>
<th id="langmstrQty">
<span id="NumStrs">
Number of Strings</span>
</th>
</tr>
内阁
BB1
BB2
温度
弦存在
字符串数
让它工作了,不确定这是否是有效的方法。。但它是有效的
header = table.xpath("tr[1]")
value = header.xpath("//span[@id='#{id}']").text
index = header.search('th//text()').collect {|text| text.to_s.strip}.reject(&:empty?).index(value)+1
让它工作,不确定这是否是有效的方法。。但它是有效的
header = table.xpath("tr[1]")
value = header.xpath("//span[@id='#{id}']").text
index = header.search('th//text()').collect {|text| text.to_s.strip}.reject(&:empty?).index(value)+1
让它工作,不确定这是否是有效的方法。。但它是有效的
header = table.xpath("tr[1]")
value = header.xpath("//span[@id='#{id}']").text
index = header.search('th//text()').collect {|text| text.to_s.strip}.reject(&:empty?).index(value)+1
让它工作,不确定这是否是有效的方法。。但它是有效的
header = table.xpath("tr[1]")
value = header.xpath("//span[@id='#{id}']").text
index = header.search('th//text()').collect {|text| text.to_s.strip}.reject(&:empty?).index(value)+1
我会使用Ruby的
和_index
结合选择来实现:
require 'nokogiri' # => true
doc = Nokogiri::HTML(<<EOT)
<tr>
<th id ="langframe">
<span id="cabinet">
Cabinet</span>
</th>
<th id ="langbb1">
<span id="bb1">
BB1</span>
</th>
<th id ="langbb2">
<span id="bb2">
BB2</span>
</th>
<th id ="langtemp">
<span id="Temp">
Temperature</span>
</th>
<th id="langstrs">
<span id="StringsPresent">
Strings Present</span>
</th>
<th id="langmstrQty">
<span id="NumStrs">
Number of Strings</span>
</th>
</tr>
EOT
th_idx = doc.search('th').to_enum.with_index.select { |th, idx| th.text['Number of Strings'] }.first
索引为:
th_idx.last # => 5
拥有th_idx
后,您可以轻松访问父节点或子节点以了解其周围环境:
th_node = th_idx.first
th_node['id'] # => "langmstrQty"
th_node.at('span')
# => #(Element:0x3fd5110286d8 {
# name = "span",
# attributes = [
# #(Attr:0x3fd511021b6c { name = "id", value = "NumStrs" })],
# children = [ #(Text "\nNumber of Strings")]
# })
th_node.at('span')['id'] # => "NumStrs"
向传递给它的每个元素添加一个基于0的索引。是必需的,因为search
返回的节点集不是枚举数,因此to_enum
返回该节点集
如果您想要一个基于1的索引,请使用和_索引(1)
我会使用Ruby的和_索引
结合使用选择
:
require 'nokogiri' # => true
doc = Nokogiri::HTML(<<EOT)
<tr>
<th id ="langframe">
<span id="cabinet">
Cabinet</span>
</th>
<th id ="langbb1">
<span id="bb1">
BB1</span>
</th>
<th id ="langbb2">
<span id="bb2">
BB2</span>
</th>
<th id ="langtemp">
<span id="Temp">
Temperature</span>
</th>
<th id="langstrs">
<span id="StringsPresent">
Strings Present</span>
</th>
<th id="langmstrQty">
<span id="NumStrs">
Number of Strings</span>
</th>
</tr>
EOT
th_idx = doc.search('th').to_enum.with_index.select { |th, idx| th.text['Number of Strings'] }.first
索引为:
th_idx.last # => 5
拥有th_idx
后,您可以轻松访问父节点或子节点以了解其周围环境:
th_node = th_idx.first
th_node['id'] # => "langmstrQty"
th_node.at('span')
# => #(Element:0x3fd5110286d8 {
# name = "span",
# attributes = [
# #(Attr:0x3fd511021b6c { name = "id", value = "NumStrs" })],
# children = [ #(Text "\nNumber of Strings")]
# })
th_node.at('span')['id'] # => "NumStrs"
向传递给它的每个元素添加一个基于0的索引。是必需的,因为search
返回的节点集不是枚举数,因此to_enum
返回该节点集
如果您想要一个基于1的索引,请使用和_索引(1)
我会使用Ruby的和_索引
结合使用选择
:
require 'nokogiri' # => true
doc = Nokogiri::HTML(<<EOT)
<tr>
<th id ="langframe">
<span id="cabinet">
Cabinet</span>
</th>
<th id ="langbb1">
<span id="bb1">
BB1</span>
</th>
<th id ="langbb2">
<span id="bb2">
BB2</span>
</th>
<th id ="langtemp">
<span id="Temp">
Temperature</span>
</th>
<th id="langstrs">
<span id="StringsPresent">
Strings Present</span>
</th>
<th id="langmstrQty">
<span id="NumStrs">
Number of Strings</span>
</th>
</tr>
EOT
th_idx = doc.search('th').to_enum.with_index.select { |th, idx| th.text['Number of Strings'] }.first
索引为:
th_idx.last # => 5
拥有th_idx
后,您可以轻松访问父节点或子节点以了解其周围环境:
th_node = th_idx.first
th_node['id'] # => "langmstrQty"
th_node.at('span')
# => #(Element:0x3fd5110286d8 {
# name = "span",
# attributes = [
# #(Attr:0x3fd511021b6c { name = "id", value = "NumStrs" })],
# children = [ #(Text "\nNumber of Strings")]
# })
th_node.at('span')['id'] # => "NumStrs"
向传递给它的每个元素添加一个基于0的索引。是必需的,因为search
返回的节点集不是枚举数,因此to_enum
返回该节点集
如果您想要一个基于1的索引,请使用和_索引(1)
我会使用Ruby的和_索引
结合使用选择
:
require 'nokogiri' # => true
doc = Nokogiri::HTML(<<EOT)
<tr>
<th id ="langframe">
<span id="cabinet">
Cabinet</span>
</th>
<th id ="langbb1">
<span id="bb1">
BB1</span>
</th>
<th id ="langbb2">
<span id="bb2">
BB2</span>
</th>
<th id ="langtemp">
<span id="Temp">
Temperature</span>
</th>
<th id="langstrs">
<span id="StringsPresent">
Strings Present</span>
</th>
<th id="langmstrQty">
<span id="NumStrs">
Number of Strings</span>
</th>
</tr>
EOT
th_idx = doc.search('th').to_enum.with_index.select { |th, idx| th.text['Number of Strings'] }.first
索引为:
th_idx.last # => 5
拥有th_idx
后,您可以轻松访问父节点或子节点以了解其周围环境:
th_node = th_idx.first
th_node['id'] # => "langmstrQty"
th_node.at('span')
# => #(Element:0x3fd5110286d8 {
# name = "span",
# attributes = [
# #(Attr:0x3fd511021b6c { name = "id", value = "NumStrs" })],
# children = [ #(Text "\nNumber of Strings")]
# })
th_node.at('span')['id'] # => "NumStrs"
向传递给它的每个元素添加一个基于0的索引。是必需的,因为search
返回的节点集不是枚举数,因此to_enum
返回该节点集
如果您想要基于1的索引,请将与索引(1)一起使用您的预期输出是什么?关于什么的索引?“字符串数”的索引应该是什么?您期望的输出是什么?关于什么的索引?“字符串数”的索引应该是什么?您期望的输出是什么?关于什么的索引?“字符串数”的索引应该是什么?您期望的输出是什么?关于什么的索引?“字符串数”的索引应该是什么?