On Tue, 27 Jul 2010, Greg Brown wrote:

Call me naive or maybe just a newb but I didn't know that the order in which 
attributes appear on an element in bxml mattered.  I mean, in XML

<element attr1="d24" attr2="hahth"/>

and

<element attr2="hahth" attr1="d24"/>

are the same when considering each document's infoset.

That may be true, but in the DOM order has relevance. Attributes are stored as a list, not a map. Pivot's org.apache.pivot.xml.Element class provides both keyed and indexed access to attributes.

Huh? What language/implementation of the DOM are you referencing? I'm looking at Java's org.w3c.dom.Node, in which an element's attributes are represented by a org.w3c.dom.NamedNodeMap. The documentation for the latter explicitly states that NamedNodeMap does not imply an ordering.

Anyway, a list is a map. Or to put it another way, any collection can be represented by a list simply by enumerating the elements of that collection in some way. That does not imply that that collection has some kind of innate or natural ordering.

Yet there are clearly cases where the order in which the attributes are written is key. The one I ran into a moment ago is pretty simple. The following works

<ListView listData="['One', 'Two', 'Three']" selectedIndex="0"/>

while the following does not

<ListView selectedIndex="0" listData="['One', 'Two', 'Three']"/>

The latter throws an IndexOutOfBoundsException.  Thoughts?

The first one works because the list data is set before the selected index. The second one fails because the list is empty when the selected index is set. If ordering did not matter, we'd have no way to know which attribute to set first.

Exactly. There is nothing in the StAX spec that states that Attributes are indexed by the order in which they are written.

Michael

Reply via email to