Как упоминалось в других ответах, JavaScript-выражения не поддерживают классы символов Unicode. Однако есть библиотека, которая обеспечивает это: отличный XRegExp Стивена Левитана и его плагин Unicode .
Вы могли использовать Разработчика вместо того, чтобы создать Ваш to_xml метод, и Вы могли использовать XMLSimple для получения по запросу XML-файла в Хеш вместо того, чтобы использовать из _xml метода. К сожалению, я не уверен, что Вы действительно получите все так очень от использования этих методов.
Могли Вы определять метод, отсутствующий, который позволяет Вам делать:
@bar = el.bar? Это избавилось бы от некоторого шаблона. Если Летучая мышь всегда будет определенной тот путь, Вы могли бы продвинуть XPath в инициализировать метод,
class Bar
def initialize(el)
self.from_xml(XPath.first(el, "./bat"))
end
end
Hpricot или REXML могли бы помочь также.
Вы могли попытаться анализировать XML с hpricot и использовать вывод для создания простого объекта Ruby? [ПРАВОВАЯ ОГОВОРКА] я не попробовал это.
Я предлагаю использовать XmlSimple для запуска. После выполнения XmlSimple#xml_in на входном файле Вы получаете хеш. Затем можно ли рекурсивно вызвать в него (obj.instance_variables) и повернуть ли все внутренние хеши (элемент is_a? (Хеш)) к объектам того же имени, например:
obj.instance_variables.find {|v| obj.send(v.gsub(/^@/,'').to_sym).is_a?(Hash)}.each do |h|
klass= eval(h.sub(/^@(.)/) { $1.upcase })
Возможно, более чистый путь, как могут находить, делает это. Впоследствии, если Вы захотите сделать xml из этого нового объекта, то необходимо будет, вероятно, изменить XmlSimple#xml_out для принятия другой опции, которая отличает объект от обычного хеша, который это используется для получения как аргумент, и затем необходимо будет записать версию метода XmlSimple#value_to_xml, таким образом, это назовет метод доступа вместо того, чтобы пытаться получить доступ к структуре хеша. Другая опция, имеет всю Вашу поддержку классов [] оператор путем возврата требуемой переменной экземпляра.
Я разделил бы attr_accessor на подклассы для создания to_xml и from_xml для Вас.
Что-то вроде этого (примечание, это не полностью функционально, только схема),
class XmlFoo
def self.attr_accessor attributes = {}
# need to add code here to maintain a list of the fields for the subclass, to be used in to_xml and from_xml
attributes.each do |name, value|
super name
end
end
def to_xml options={}
# need to use the hash of elements, and determine how to handle them by whether they are .kind_of?(XmlFoo)
end
def from_xml el
end
end
Вы могли затем использовать его как....
class Second < XmlFoo
attr_accessor :first_attr => String, :second_attr => Float
end
class First < XmlFoo
attr_accessor :normal_attribute => String, :sub_element => Second
end
Надежда это дает общее представление.