Pergunta

Eu tenho alguns XHTML (mas realmente qualquer XML vai fazer) como este:

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

Como faço para obter o conteúdo completo do <h1/> como uma String em Ruby? Como em:

assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content

Será que algum dos quadros XML ( Nokogiri , libxml-ruby , & c) têm esse tipo de coisa built-in? Se não, eu me sinto como um Y-Combinator pode a ferramenta certa para o trabalho, mas eu não posso bastante descobrir o que seria semelhante.

Foi útil?

Solução

Com Nokogiri você pode simplesmente pedir a text de um nó. O problema que vejo quando fazer isso, porém, é que todos os espaços em branco e quebras de linha que estão em que o nó será devolvido, de modo que você pode querer tirar aqueles fora (provavelmente uma maneira melhor de fazer isso do que o que eu fiz para este exemplo).

Aqui está um exemplo:

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

Outras dicas

Nokogiri de Nokogiri :: XML :: Node # content irá fazê-lo:

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"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top