その他
    ホーム技術発信DoRubyto_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 で変換。