ホーム DoRuby to_xml メソッドのエチュード

to_xml メソッドのエチュード

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

rails に xmlを出力するときに便利な to_xml メソッドがありますが

とある要件に対応する為に

ちょっと加工が必要だったことがあったのでメモです。

おもに困ったこと

1. エンティティ名が to_json のときと違う。エンティティー名に _ があるときに – にされてしまう。

2. タグの属性に type=“値のクラス” が入ってしまう。

3. 文字コードが変えられない。 <?xml version=”1.0″ encoding=”UTF-8”?> というタグが入ってしまう。

環境

CentOS Linux release 7.1.1503 (Core)

ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]

Rails 4.2.2

やっつけソース

def xml_source(object, xml_char) # xml内容作成の定義。
  <<-end_of_xml_source
<?xml version=\"1.0\" encoding=\"#{xml_char}\"?>
#{object.to_xml(dasherize: false, skip_types: true, skip_instruct: true).gsub('"', '"').gsub("'", ''')}
  end_of_xml_source
end
xml_source(object, xml_char).encode(xml_char, invalid: :replace, undef: :replace)

解説

1. to_xml メソッドの引数に dasharize: false を指定することで解決。

2. 同じく skip_types: true を指定することで解決。

3. 同じくskip_instruct: true を指定することでヘッダのタグを表示しなくできる。所望のヘッダタグの取り付けと実際の文字コードの変換はxml 出力後に行う。文字コードの変換には encode メソッドを使用した。変換不可能な文字は置換。

他に対応した点

nil の値があると <エンティティ名 nil=“true”> のようなタグが発行されてしまう為、データに nil があったら ” に変換。

xml出力のときだけ出したくなかった文字は to_xml後にgsub で変換。

記事を共有

最近人気な記事