2009-06-04 6 views
1

私はいくつかのXHTMLを持っている(しかし、本当にすべてのXMLが行います)このように:RubyでXMLタグを解析する際に、すべてのコンテンツの合計を取得するにはどうすればよいですか?

<h1> 
    Hello<span class='punctuation'>,</span> 
    <span class='noun'>World<span class='punctuation'>!</span> 
</h1> 

を私はRubyで文字列として<h1/>のフルコンテンツを取得するにはどうすればよいですか?以下のように:

assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content 

Nokogirilibxml-ruby、& Cを。)XMLフレームワークのいずれかを実行し、組み込みのこの種のものがありますか?もしそうでなければ、私はY-Combinatorが仕事のための正しいツールかもしれないと感じますが、それはどうなるか分かりません。

答えて

3

ノコギリでノードのtextを尋ねることができます。しかし、そのノードにあるすべての空白と改行が返されるので、それらを削除することができます(この例で行ったことよりも良い方法です)。ここで

はサンプルです:

def test_nokogiri_text 
    value = Nokogiri::HTML.parse(<<-HTML_END) 
    "<h1> 
     Hello<span class='punctuation'>,</span> 
     <span class='noun'>World<span class='punctuation'>!</span> 
    </h1>" 
    HTML_END 

    h1_node = value.search("h1").first 
    assert_equal("Hello, World!", h1_node.text.split(/\s+/).join(' ').strip) 
end 
+0

を私はXML以来、完全に罰金である(とにかくスペースにすべての改行を回すことするつもりだ場合それらを等価と見なします)、h1_note.text.gsub(/ \ s + /、 '').stripは同じように動作し、新しいオブジェクトをたくさん作成する必要がないため、少し高速です。 –

2

鋸山のNokogiri::XML::Node#contentはそれを行います。

irb(main):020:0> node 
=> <h1> 
    Hello<span class="punctuation">,</span> 
    <span class="noun">World<span class="punctuation">!</span> 
</span> 
</h1> 
irb(main):021:0> node.content 
=> "\n Hello,\n World!\n\n" 
+0

#textと#contentは同じなので、Aaronは空白を世話した "Answer" b/cを得ました。 +1、でも:) –

+0

プラス、彼は最初に彼の答えを掲載した。 – Pesto

関連する問題