teppeilog

ちょっとずつエンジンかかってきた

REXMLの文字エスケープに関するバグ

leave a comment

REXMLを使用してXMLを作成するとき、Elementに子ノードを追加する場合にadd_elementを使用し、同時に属性値も追加していた。しかし何故か&がエスケープされなかった。’はエスケープされるけど。以下コードで調べてみたら、add_elementで属性追加するとエスケープされないけど、add_attributeで追加するとエスケープされることが分かった。

require 'rexml/document'

value = "<>&\'\""

sample = REXML::Element.new("a")

sample.add_element("b", {"attr" => value})

c_tag = sample.add_element("c")
c_tag.add_attribute("attr",value)

xml = ""
formatter = REXML::Formatters::Pretty.new
formatter.compact = true
formatter.write(sample, xml)  

puts xml

実行結果

<a>
  <b attr='<>&&apos;"'/>
  <c attr='&lt;&gt;&amp;&apos;&quot;'/>
</a>

なぜ?

動作環境 Ruby 1.8.7

このエントリーをはてなブックマークに追加
はてなブックマーク - REXMLの文字エスケープに関するバグ
Share on Facebook

Written by teppei

1月 29th, 2012 at 5:57 pm

Posted in プログラミング

Tagged with ,