RubyでXHTMLなどのXMLを処理していて、ある要素を文字列として取得したいと思ったときのサンプルです。
# coding: utf-8 require 'rexml/document' doc = REXML::Document.new(DATA) elem = doc.elements['//body/div'] # textは、その要素の子要素のうち、最初のテキスト要素を文字列として返します。 p elem.text # => "\n " # textsは、その要素の子要素のうち、テキスト要素を文字列の配列として返します。 p elem.texts # => ["\n ", "\n ", "\n"] # to_sは、自身をXML文字列として返します。よくouterXMLと呼ばれる挙動です。 p elem.to_s # => "<div>\n <h1>テストページ</h1>\n <div>\n こんにちは<strong>世界</strong>。\n </div>\n</div>" # innerXMLが欲しいときは、このように子要素すべてのto_sを呼べばOKです。 p elem.map(&:to_s).join # => "\n <h1>テストページ</h1>\n <div>\n こんにちは<strong>世界</strong>。\n </div>\n" # XMLタグを取り除いた文字列だけを取得するときは、このようにXPathを使うのが簡単です。 class REXML::Element def inner_text REXML::XPath.match(self,'.//text()').join end end p elem.inner_text # => "\n テストページ\n \n こんにちは世界。\n \n" __END__ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>TEST PAGE</title> </head> <body> <div> <h1>テストページ</h1> <div> こんにちは<strong>世界</strong>。 </div> </div> </body> </html>