0

次の HTML ブロックがあります。

<tr>
   <th>Consignment Service Code</th>
   <td>ND16</td>
</tr>

私が最終的に引っ張ろうとしているのはその文字列ですが、それを行うには、 text に基づいてND16を選択する必要があります。<tr>Consignment Service Code

既に Nokogiri を使って HTML を解析しているので、そのまま使い続けていただければ幸いです。

では、テキスト " " に基づいて HTML のブロックを選択するにはどうすればよいConsignment Service Codeでしょうか?

4

2 に答える 2

2

あなたはこれを行うことができます:

require 'nokogiri'

doc=Nokogiri::HTML::parse <<-eot
<tr>
   <th>Consignment Service Code</th>
   <td>ND16</td>
</tr>
eot

node = doc.at_xpath("//*[text()='Consignment Service Code']/following-sibling::*[1]")
puts node.text
# >> ND16

これは、あなたが始めるのに役立つかもしれない追加の試みです:

## parent node
parent_node = doc.at_xpath("//*[text()='Consignment Service Code']/..")
puts parent_node.name # => tr

## to get the child td
puts parent_node.at_xpath("//td").text # => ND16

puts parent_node.to_html

#<tr>
#<th>Consignment Service Code</th>
#   <td>ND16</td>
#</tr>
于 2013-09-25T11:09:41.310 に答える
1

さらに別の方法。

Nokogiri のcss方法を使用して適切なノードを見つけ、タグtrに目的のテキストがあるノードを選択します。th最後に、選択したノードを操作して値を抽出しtdます。

require 'nokogiri'

str = '<tr>
   <th>Consignment</th>
   <td>ND15</td>
</tr>
<tr>
   <th>Consignment Service Code</th>
   <td>ND16</td>
</tr>
<tr>
   <th>Consignment Service Code</th>
   <td>ND17</td>
</tr>'

doc = Nokogiri::HTML.parse(str)
nodes = doc.css('tr')
           .select{|el| 
             el.css('th').text =~ /^Consignment Service Code$/
           }

nodes.each do |el|
  p el.css('td').text
end

出力は次のとおりです。

"ND16"
"ND17"
于 2013-09-25T12:22:33.220 に答える