次のようなHTMLがあります。
_<dt>
<a href="#">Hello</a>
(2009)
</dt>
_
すでにすべてのHTMLをrecord
という変数にロードしています。年、つまり2009が存在する場合は、それを解析する必要があります。
dt
タグ内のテキストを取得できますが、a
タグ内のテキストは取得できませんか?私はrecord.search("dt").inner_text
を使用しましたが、これですべてが得られます。
ささいな質問ですが、私はこれを理解することができませんでした。
すべての直接の子をテキストで取得し、それ以上のサブ子を取得しないようにするには、次のようにXPathを使用できます。
doc.xpath('//dt/text()')
または、検索を使用する場合:
doc.search('dt').xpath('text()')
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
dt
要素には2つの子があるため、次の方法でアクセスできます。
doc.search("dt").children.last.text