savonrb / nori

XML to Hash translator
MIT License
245 stars 74 forks source link

Inconsistent types when parsing empty tags #97

Open lukasbischof opened 1 year ago

lukasbischof commented 1 year ago

When parsing an empty tag, the result varies depending on the attributes the element has:

Nori.new.parse('<foo />')
#=> {"foo"=>nil}

Nori.new.parse('<foo bar />')
#=> {}

Nori.new.parse('<foo bar="baz"/>')
#=> {"foo"=>{"@bar"=>"baz"}}

Nori.new.parse('<foo bar="baz">Content</foo>')
#=> {"foo"=>"Content"}

It would be handy if there was an option to configure that the parsed response stays consistent (like for string values), even if some information may be lost (e.g. always returning nil, even if there were attributes)

Maybe something like:

Nori.new(ignore_empty_attributes: true).parse('<foo bar />')
#=> {"foo"=>nil}
pcai commented 1 year ago

Thanks for the suggestion. This is less than 100% intuitive and I will update the README with some of these examples so people are not caught off guard.

If you're open to working this I can review the PR. Otherwise it may have to wait until we get through some more housekeeping before I attempt this myself.

lukasbischof commented 1 year ago

Ok, thanks for the fast response. I think then I'll try to make a PR soonish