2016-04-05 5 views
1

現在、nokogiriを使用してページの要素の内部HTMLを取得しようとしています。しかし、要素のテキストを取得するだけでなく、エスケープシーケンスも取得しています。 nokogiriでそれらを抑制または除去する方法はありますか?Nokogiri inner_HTMLオブジェクトでエスケープシーケンスを無視/削除する方法

require 'nokogiri' 
require 'open-uri' 

page = Nokogiri::HTML(open("http://the.page.url.com")) 

page.at_css("td[custom-attribute='foo']").parent.css('td').css('a').inner_html 

これは、これを行うための最も効果的かつ直接的鋸山(またはルビー)である何=>"\r\n\t\t\t\t\t\t\t\tTheActuallyInnerContentThatIWant\r\n\t"

道を返しますか?

+0

どのようなエスケープシーケンスですか?私は、様々なテキストノードのテキストコンテンツであるタブと改行のみを参照します。 「[mcve]」を参照してください。 HTMLのサンプルを最小限にすることなく、あらゆる種類の詳細な答えを与えることは困難です。 –

答えて

2
page.at_css("td[custom-attribute='foo']") 
    .parent 
    .css('td') 
    .css('a') 
    .text    # since you need a text, not inner_html 
    .strip    # this will strip a result 

String#strip

サイドノートcss('td a')は、css('td').css('a')より効率が高い可能性があります。

0

必要なテキストを含む最も近いノードにドリルインすることが重要です。ノード/ XML ::要素を返すat_xpath

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<html> 
    <body> 
    <p>foo</p> 
    </body> 
</html> 
EOT 

doc.at('body').inner_html # => "\n <p>foo</p>\n " 
doc.at('body').text # => "\n foo\n " 
doc.at('p').inner_html # => "foo" 
doc.at('p').text # => "foo" 

atat_cssと:これを考えてみましょう。 search,cssおよびxpathはNodeSetを返します。ノードまたはノードセットを見たときにどのようにtextまたはinner_htmlリターン情報には大きな違いがあります:searchを使用してノードセットを返却し、そのtextは、ノードのテキストが一緒に連結返したこと

doc = Nokogiri::HTML(<<EOT) 
<html> 
    <body> 
    <p>foo</p> 
    <p>bar</p> 
    </body> 
</html> 
EOT 

doc.at('p') # => #<Nokogiri::XML::Element:0x3fd635cf36f4 name="p" children=[#<Nokogiri::XML::Text:0x3fd635cf3514 "foo">]> 
doc.search('p') # => [#<Nokogiri::XML::Element:0x3fd635cf36f4 name="p" children=[#<Nokogiri::XML::Text:0x3fd635cf3514 "foo">]>, #<Nokogiri::XML::Element:0x3fd635cf32bc name="p" children=[#<Nokogiri::XML::Text:0x3fd635cf30dc "bar">]>] 

doc.at('p').class # => Nokogiri::XML::Element 
doc.search('p').class # => Nokogiri::XML::NodeSet 

doc.at('p').text # => "foo" 
doc.search('p').text # => "foobar" 

お知らせ。これはめったにあなたが望むものではありません。

ノコギリは、セレクタがCSSの99%かXPathの99%かを判断するのに十分にスマートであることに注意してください。どちらのタイプのセレクタにも汎用searchatを使用すると便利です。

+0

これは非常に役に立ちました!私はまだ「at」と「search」のinとoutを学んでいるので、これらの例は非常に高く評価されています! –