18

次のような HTML があります。

<dt>
  <a href="#">Hello</a>
  (2009)
</dt>

私はすでにすべての HTML を という変数にロードしていますrecord。存在する場合、年、つまり2009年を解析する必要があります。

dtタグ内のテキストではなく、タグ内のテキストを取得するにはどうすればよいaですか? 私は使用record.search("dt").inner_textしましたが、これですべてが得られます。

些細な質問ですが、私はこれを理解することができませんでした。

4

3 に答える 3

17

すべての直接の子をテキストで取得し、それ以上のサブ子を取得するには、次のように XPath を使用できます。

doc.xpath('//dt/text()')

または、検索を使用する場合:

doc.search('dt').xpath('text()')
于 2012-05-29T12:53:37.140 に答える
12

XPath を使用して (@Casper の提案に従って) 必要なものを正確に選択することが正しい答えです。

def own_text(node)
  # Find the content of all child text nodes and join them together
  node.xpath('text()').text
end

これが代替の楽しい答えです:)

def own_text(node)
  node.clone(1).tap{ |copy| copy.element_children.remove }.text
end

実際に見られる:

require 'nokogiri'
root = Nokogiri.XML('<r>hi <a>BOO</a> there</r>').root
puts root.text       #=> hi BOO there
puts own_text(root)  #=> hi  there
于 2012-05-29T21:49:06.663 に答える
5

このdt要素には 2 つの子があるため、次の方法でアクセスできます。

doc.search("dt").children.last.text
于 2012-05-29T12:46:47.467 に答える