1

次のようなXHTMLがあります(ただし、実際にはどのXMLでも構いません)。

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

<h1/>Rubyで文字列としての完全なコンテンツを取得するにはどうすればよいですか? 次のように:

assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content

XML フレームワーク ( Nokogirilibxml-rubyなど) には、このようなものが組み込まれていますか? そうでない場合、Y-Combinator がこの仕事に適したツールかもしれないと思いますが、それがどのようになるかはよくわかりません。

4

2 に答える 2

3

textNokogiri を使用すると、ノードの を求めることができます。ただし、それを行うときに見られる問題は、そのノードにあるすべての空白と改行が返されることです。そのため、それらを取り除きたい場合があります (この例で行った方法よりも良い方法です)。

以下にサンプルを示します。

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
于 2009-06-04T15:54:48.167 に答える
2

Nokogiri の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"
于 2009-06-04T15:58:17.790 に答える