Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何获取';th';使用Nokogiri的元素_Ruby_Nokogiri - Fatal编程技术网

Ruby 如何获取';th';使用Nokogiri的元素

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<

我有以下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</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)一起使用

您的预期输出是什么?关于什么的索引?“字符串数”的索引应该是什么?您期望的输出是什么?关于什么的索引?“字符串数”的索引应该是什么?您期望的输出是什么?关于什么的索引?“字符串数”的索引应该是什么?您期望的输出是什么?关于什么的索引?“字符串数”的索引应该是什么?