Search code examples
xmlapache-flexarraycollection

Flex: Converting XML to ArrayCollection with more than one node


I have an XML file I'm reading in where a branch of the tree looks like this:

    <data id="Shallow" label="Show Shallow Imagery (1 m)">
      <layer name="Bathymetry" url="OtherImagery" type="Dynamic" legendurl="">
        <visiblelayers>1</visiblelayers>
        <visiblelayers>4</visiblelayers>
      </layer>
      <layer name="Backscatter" url="OtherImagery" type="Dynamic" legendurl="">
        <visiblelayers>2</visiblelayers>
      </layer>
      <layer name="PCA" url="BUIS_Imagery" type="Dynamic" legendurl="">
        <visiblelayers>3</visiblelayers>
        <visiblelayers>4</visiblelayers>
      </layer>
    </data>

The user selects the layer using a radiobutton and in the click event, I pass layer.(@name==e.target.label).visiblelayers to a function that converts XML to an ArrayCollection.

 private function convertXMLtoArrayCollection(file:XMLList):ArrayCollection{
    var xml:XMLDocument = new XMLDocument(file);
    var decoder:SimpleXMLDecoder = new SimpleXMLDecoder;
    var data:Object = decoder.decodeXML((xml));
    var array:Array = ArrayUtil.toArray(data);

    return new ArrayCollection(array);
}

For the "Backscatter" layer with only one visiblelayers node, I get the expected ArrayCollection returned. enter image description here

But the other two layers returns an ArrayCollection with the visibleLayers node added in. enter image description here

Why isn't it returning an ArrayCollection like this? enter image description here


Solution

  • I ended up using the following function to return an ArrayCollection that was suitable for my code:

    private function convertXMLtoArrayCollection1(file:XMLList):ArrayCollection
    {
        var arrcol:ArrayCollection = new ArrayCollection;
    
        for each (var value:* in file)
        {
            arrcol.addItem(value)
        }
    
        return arrcol;
    }