XPathでXMLの要素名に日本語が使われている要素をマッチさせたい
Rubyのバージョンは2.1.2です。
REXMLを使ってXML内の特定のタグ以下のノードにマッチさせたいです。
タグが英語であればマッチするのですが、日本語のタグだとルート以下の全体がマッチしてしまいます。
例えば、XML解析のRubyコードは以下のようになっています。
require 'rexml/document'
doc = nil
File.open("example.xml") do |file|
doc = REXML::Document.new(file)
end
puts REXML::XPath.match(doc, "/root/a")
この時、読み込むexample.xmlが以下のような場合は、
<?xml version="1.0" ?>
<root>
<a>
<b/>
</a>
<a>
<b>bbb1</b>
<b>bbb2</b>
<e>eeee1</e>
<f>ffff1</f>
<b>bbb3</b>
<c>ccc1</c>
</a>
<a>
<b>bbb4</b>
<b>bbb5</b>
</a>
</root>
以下のように返ってきますが、
#<a>
# <b/>
#</a>
#<a>
# <b>bbb1</b>
# <b>bbb2</b>
# <e>eeee1</e>
# <f>ffff1</f>
# <b>bbb3</b>
# <c>ccc1</c>
#</a>
#<a>
# <b>bbb4</b>
# <b>bbb5</b>
#</a>
example.xmlが以下のような場合、
<?xml version="1.0" ?>
<本棚>
<本>
<b/>
</本>
<本>
<b>bbb1</b>
<b>bbb2</b>
<e>eeee1</e>
<f>ffff1</f>
<b>bbb3</b>
<c>ccc1</c>
</本>
<本>
<b>bbb4</b>
<b>bbb5</b>
</本>
</本棚>
Rubyのコードを以下のように書き換えても、
# coding: utf-8
require 'rexml/document'
doc = nil
File.open("example.xml") do |file|
doc = REXML::Document.new(file)
end
puts REXML::XPath.match(doc, "/本棚/本")
以下のように返ってきます。
#<本棚>
# <本>
# <b/>
# </本>
# <本>
# <b>bbb1</b>
# <b>bbb2</b>
# <e>eeee1</e>
# <f>ffff1</f>
# <b>bbb3</b>
# <c>ccc1</c>
# </本>
# <本>
# <b>bbb4</b>
# <b>bbb5</b>
# </本>
#</本棚>
理想は以下のように返ってきて欲しいです。
#<本>
# <b/>
#</本>
#<本>
# <b>bbb1</b>
# <b>bbb2</b>
# <e>eeee1</e>
# <f>ffff1</f>
# <b>bbb3</b>
# <c>ccc1</c>
#</本>
#<本>
# <b>bbb4</b>
# <b>bbb5</b>
#</本>
XMLファイル自体の文字コードはUTF-8です。 どのようにしたら希望通りにパースされた結果を得ることができるでしょうか?