Builder gem - xml attributes ordering

  • Thread starter Arunprabu Durairaju
  • Start date
A

Arunprabu Durairaju

Hi,

I am currently developing a xml service using Ruby on rails with builder
gem. Builder is a great tool to create xml easily. But the only and
important issue I am facing is - unable to set the order inwhich the
attributes to be displayed in the xml. Whatever order I give the
attributes of an element, Builder creates the attributes in a totally
different order. Request someone's help to overcome this issue. Please
specify even if there is another method to create this service which
return xml instead of html using REST instead of Builder.

Thanks in advance
Arun
 
L

Lyle Johnson

I am ... unable to set the order in which the
attributes to be displayed in the xml.

<snip>

Why do you think the attributes for an element *should* appear in any
particular order?
 
A

Arunprabu Durairaju

Lyle said:
<snip>

Why do you think the attributes for an element *should* appear in any
particular order?

Hi Johnson,

The service We are developing is going to be used by and application and
persons. That is the service will be called from another application for
getting the data. In this case, the ordering is not a necessary thing.
But in case of reading the xml manually in a browser, it is easy to read
the data if it comes in a specified order. Because, there are 5 to 10
attributes to each elements in our xml. And it is tough to locate the
attribute each time.

Thanks
Arun
 
K

Keith Fahlgren

<snip>

Why do you think the attributes for an element *should* appear in any
particular order?

To be explicit, Builder's behavior is acceptable because the order of
attributes in XML is not defined:

"""Note that the order of attribute specifications in a start-tag or
empty-element tag is not significant."""

http://www.w3.org/TR/REC-xml/



HTH,
Keith
 
A

Arunprabu Durairaju

Hi Johnson,

I understand that it is not specified in the XML specification and it is
not a requirement generally. But in languages like Java using Xerces,
the xml is generated with attributes in the sequence you have created
it. So just trying to find if there is any way to over come this issue.
I already have an alternative of constructing the xml as a string in the
sequence of attributes I need. But this is an ugly approach and trying
to find if there is any other alternative.

I also checked with REXML and it has the same behaviour as Builder.

Thanks
Arun
 
K

Keith Fahlgren

Hi Johnson,

I understand that it is not specified in the XML specification and it is
not a requirement generally.

I also checked with REXML and it has the same behaviour as Builder.

Yeah, I'm sure they both use Hashes internally for attributes (and
Hashes are unordered in Ruby). However, it'd be easy to modify the
attribute insertion in Builder to take an Array instead. This is what
you'll have to change:

gems/builder-2.0.0/lib/builder/xmlmarkup.rb

# Insert the attributes (given in the hash).
def _insert_attributes(attrs, order=[])
return if attrs.nil?
order.each do |k|
v = attrs[k]
@target << %{ #{k}="#{_attr_value(v)}"} if v
end
attrs.each do |k, v|
@target << %{ #{k}="#{_attr_value(v)}"} unless order.member?(k)
end
end


Keith
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top