にタグ内に直接テキストを取得し、私は次のようになり、いくつかのHTMLを持っています。それが存在すれば、2009年を解析する必要があります。鋸山
dt
タグ内のテキストは取得できますが、a
タグ内のテキストは取得できません。私はrecord.search("dt").inner_text
を使用して、これは私にすべてを与える。
これは簡単な質問ですが、これを把握することはできませんでした。
にタグ内に直接テキストを取得し、私は次のようになり、いくつかのHTMLを持っています。それが存在すれば、2009年を解析する必要があります。鋸山
dt
タグ内のテキストは取得できますが、a
タグ内のテキストは取得できません。私はrecord.search("dt").inner_text
を使用して、これは私にすべてを与える。
これは簡単な質問ですが、これを把握することはできませんでした。
は、あなたがそうのようなXPathを使用することができ、すべてのテキストとの直接の子ではなく、それ以上のサブ子を取得するには:
をdoc.xpath('//dt/text()')
それとも、検索を使用する場合:XPathのトンを使用して
doc.search('dt').xpath('text()')
上記のメソッドは、['XML :: Text'](http://nokogiri.org/Nokogiri/XML/Text.html)ノードのNodeSetを提供します。単一の結果を得るために 'at_xpath'(または単に' at')を使い、そのノード上の '.content'や' .text'メソッドを呼び出してテキストを文字列として取得することができます。 – Phrogz
dt
要素は、2人の子供がいるので、あなたはでそれにアクセスすることができます。
doc.search("dt").children.last.text
oあなたが望むものを正確に選択する(@ Casperによって提案されるように)正しい答えです。
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つのテキストノードが使用する場合を除き、実際に存在していることも:
ここで代替、楽しい答え:)
行動にみるです'noblanks'オプションを使用してHTMLを解析します):最初のテキストノードは' 'の前に '' \ n "'、2番目のテキストノードは '" \ n(2009)\ n "'です。 – Phrogz