【问题标题】:How to change Rails 3 to_xml encoding如何更改 Rails 3 to_xml 编码
【发布时间】:2014-05-28 13:40:38
【问题描述】:

我在一个模型上使用 Rails 3 to_xml,其中包含一些选项,例如 include、except 和方法。 所以这不是我第一次使用 to_xml

我正在做这样的事情:

to_xml(include: {
  order: {
    methods: [:my_avg],
    except:  [:this_attr, :and_this_attr ]
  },
  customer: {}
})

XML 结果:

<?xml version="1.0" encoding="UTF-8"?>
<my-model>
  <attr1 type="integer">12</attr1>
  <attr2 type="integer">12</attr2>
  <order>
    <name>foo</name>
    <desc>bar</desc>
    <my-avg>
      <avg type="integer">123</avg>
      <foo>ok</foo>
    </my-avg>
  </order>
  <updated-at type="datetime">2014-04-14T11:16:56-03:00</updated-at>
</my-model>

但现在我想更改 xml 编码 ISO_8859_1 而不是 utf8。

我还没有看到 ActiveRecord::Serialization 模块上的编码选项。

如果我只是添加一个编码选项,它会创建一个 XML 属性,而不是更改此 XML 上的编码:

<?xml version="1.0" encoding="UTF-8"?>
<my-model>
  <attr1 type="integer" encoding="ISO-8859-1">12</attr1>
  <attr2 type="integer" encoding="ISO-8859-1">12</attr2>
  <order>
    <name>foo</name>
    <desc>bar</desc>
    <my-avg>
      <avg type="integer">123</avg>
      <foo>ok</foo>
    </my-avg>
  </order>
  <updated-at type="datetime">2014-04-14T11:16:56-03:00</updated-at>
</my-model>

有没有办法使用 ActiveRecord 的 to_xml 指定编码?

【问题讨论】:

    标签: ruby-on-rails xml ruby-on-rails-3 ruby-2.1


    【解决方案1】:

    您可以在模型中覆盖to_xml 并指定编码。像这样的东西可以工作:

    class ModelName < ActiveRecord::Base
      def to_xml(options = {})
        require 'builder'
        options[:indent] ||= 2
        xml = options[:builder] ||= ::Builder::XmlMarkup.new(indent: options[:indent])
        xml.instruct! :xml, :version=>"1.0", :encoding => "ISO-8859-1"
        xml.level_one do
          xml.tag!(:second_level, 'content')
        end
      end
    end
    

    【讨论】:

    • 它返回一个正确编码的 XML,但它确实覆盖了默认行为。所以内容只有:"content "
    • 是的,你必须自己实现。因为默认情况下rails似乎不允许您覆盖编码,所以您必须自己修补或实现它。获取灵感,here is how rails does it
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2011-10-28
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多