В Ruby, есть ли способ использовать XmlSimple, когда некоторые значения равны нулю? - PullRequest
2 голосов
/ 26 февраля 2011

Как ноль захлебнется XmlSimple:

>> require 'xmlsimple'
=> true

>> XmlSimple.xml_out([{'a' => 1}, {'a' => 3}])
=> "<opt>\n  <anon a=\"1\" />\n  <anon a=\"3\" />\n</opt>\n"

но если это следующее, то это выдаст ошибку:

>> XmlSimple.xml_out([{'a' => 1}, {'a' => nil}])
ArgumentError: Use of uninitialized value!
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:798:in `value_to_xml'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:794:in `each'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:794:in `value_to_xml'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:848:in `value_to_xml'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:842:in `each'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:842:in `value_to_xml'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:807:in `value_to_xml'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:794:in `each'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:794:in `value_to_xml'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:239:in `xml_out'
    from /Library/Ruby/Gems/1.8/gems/xml-simple-1.0.12/lib/xmlsimple.rb:259:in `xml_out'
    from (irb):4

Ответы [ 2 ]

2 голосов
/ 03 июня 2013

Вы также можете просто добавить опцию SuppressEmpty к команде.
XmlSimple.xml_out ([{...}], 'SuppressEmpty' => nil).

из - http://xml -simple.rubyforge.org /

2 голосов
/ 27 февраля 2011

Если вы посмотрите на документацию , в ней упоминается, что при использовании xml_out следует избегать значений nil. Я бы порекомендовал один из следующих подходов:

# To create an empty anon element:
XmlSimple.xml_out([{'a' => 1}, {}])
=> "<opt>\n  <anon a=\"1\" />\n  <anon></anon>\n</opt>\n"

# To create an anon element with a blank 'a' attribute:
XmlSimple.xml_out([{'a' => 1}, {'a' => ''}])
=> "<opt>\n  <anon a=\"1\" />\n  <anon a=\"\" />\n</opt>\n"

# To remove the attribute entirely (with value of 3),
# but still create an empty anon tag:
XmlSimple.xml_out([{'a' => 1}, {'-a' => 3}])
=> "<opt>\n  <anon a=\"1\" />\n  <anon />\n</opt>\n"

# To remove the attribute entirely (with value of nil),
# but still create an empty anon tag:
XmlSimple.xml_out([{'a' => 1}, {'-a' => nil}])
=> "<opt>\n  <anon a=\"1\" />\n  <anon />\n</opt>\n"
...