Сериализация XML из экземпляра класса в Ruby с пользовательскими атрибутами - PullRequest
0 голосов
/ 01 ноября 2019

Допустим, у меня есть следующие классы в Ruby:

class Person
  attr_accessor :name, :car
end

class Car
  attr_accessor :maker
end

Существует ли гем в ruby, который позволил бы мне сериализовать экземпляр Person в XML и позволил бы добавить настраиваемые атрибуты вXML-теги тоже? (предпочтительно декларативный API, где я могу либо назначить атрибуты определенному тегу внутри объявления attr_accessor, либо сразу для всех тегов в виде хэша, возвращенного функцией).

Например,Я хочу добиться чего-то вроде этого:

<Person>
  <Name origin="American">
     Mark
  </Name>
  <Car from="My friend">
    <Maker>
      Honda
    </Maker>
  </Car>
</Person>

https://github.com/rails/activemodel-serializers-xml не позволяет вам устанавливать пользовательские атрибуты (функция атрибутов в примерах фактически устанавливает теги, а не атрибуты). Переопределение to_xml не позволяет мне изменять существующие теги, и я бы не стал добавлять новые. Другие драгоценные камни, такие как Nokogiri, похоже, имеют более практический подход, когда вы вручную создаете xml, а не выводите его из определения класса. Спасибо за помощь.

1 Ответ

1 голос
/ 13 ноября 2019

Вы можете включить модуль XML::Mapping, вы можете увидеть пример здесь .

Вы можете вызывать все методы фабрики узлов из тела классов отображения.

Чтобы установить таможенные атрибуты в документе XML:

require 'xml/mapping'

class Person
  include XML::Mapping

  text_node :from, "@from" # ,:default_value=>"My friend" migth works as well

  def initialize
    # add this to the initialize method 
    # if :default_value=>"My friend" in text_node do not works
    @from = "My friend"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...