Comment puis-je obtenir la somme de tout le contenu lors de l'analyse d'une balise XML dans Ruby?

StackOverflow https://stackoverflow.com/questions/951220

  •  11-09-2019
  •  | 
  •  

Question

J'ai quelques XHTML (mais vraiment tout XML fera) comme ceci:

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

Comment puis-je obtenir le contenu complet de la <h1/> en tant que chaîne en Ruby? Comme dans:

assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content

Effectuez l'une des cadres XML ( Nokogiri , libxml-rubis, etc.) ont ce genre de chose intégrée? Sinon, je me sens comme un Y-Combinator pourrait l'outil pour le travail, mais je ne peux pas tout à fait comprendre ce qu'il ressemblerait.

Était-ce utile?

La solution

Avec Nokogiri vous pouvez simplement demander le text d'un nœud. La question que je vois quand faire cela est bien que tous les espaces et les sauts de ligne qui sont ce nœud seront retournés, de sorte que vous pourriez vouloir dépouiller les out (probablement une meilleure façon de le faire que ce que je l'ai fait pour cet exemple).

Voici un exemple:

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

Autres conseils

Nokogiri :: XML :: Node contenu # le fera:

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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top