【问题标题】:Ruby to_xml change attributes name for Api requestRuby to_xml 更改 Api 请求的属性名称
【发布时间】:2015-10-06 12:11:00
【问题描述】:

我想转换 xml 响应的密钥,以便它们与第三方 Api 请求匹配。

    class Person1
      include ActiveModel::Serializers::Xml

      attr_accessor :name, :age

      def attributes
        {'name' => nil, 'age' => nil}
      end

      def capitalized_name
        name.capitalize
      end
    end
p = Person1.new
p.name = "test"
puts p.to_xml

输出 ::-

 <?xml version="1.0" encoding="UTF-8"?>
    <person1>
      <age nil="true"/>
      <name>test</name>
    </person1>

我正在寻找一种方法来更改 xml 输出中的键。

<?xml version="1.0" encoding="UTF-8"?>
<person1>
      <Age nil="true"/>
      <Name>test</Name>
</person1>

【问题讨论】:

    标签: ruby-on-rails ruby api ruby-on-rails-4 rails-api


    【解决方案1】:

    怎么样:

    puts p.to_xml(:camelize => true)
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <Person1>
      <Age nil="true"/>
      <Name>test</Name>
    </Person1>
    

    或者如果大写的Person 打扰到你,我猜你可以这样做:

    puts p.to_xml(:camelize => true).sub('<Person1>','<person1>').sub('</Person1>','</person1>')
    
    <?xml version="1.0" encoding="UTF-8"?>
    <person1>
      <Age nil="true"/>
      <Name>test</Name>
    </person1>
    

    【讨论】:

    • 非常感谢@Roko。你知道这个选项记录在哪里吗?
    • @sanjee apidock.com/rails/ActiveRecord/Serialization/to_xml如果答案符合你的需要,请标记为正确,ty
    • 你知道像 object.from_xml(response, :snake_case => true )这样的另一种方式
    • @sanjee 我想不出——为什么?缺少什么?
    • 我需要它,因为我有一个对象,它的属性位于 snake_case 中。我从外部 api 收到的响应再次出现在 Camelcase 中。因此,为了使用我从外部 API 收到的值填充对象,ty.
    猜你喜欢
    • 2019-12-10
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2017-06-24
    • 2020-01-18
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多