AS3按属性排序XML文件(数字)

时间:2015-03-26 17:01:17

标签: xml actionscript-3

我正在尝试按属性在AS3中对XML文档进行排序。我有一个函数写的:

        public static function sortXMLByAttribute($xml:XML,$attribute:String,$options:Object=null,$copy:Boolean = false):XML
    {
        var xmlArray:Array  = new Array();

        var item:XML;

        for each(item in $xml.children())
        {
            var object:Object = {data:item, order:item.attribute($attribute)};
            xmlArray.push(object);
        }

        //sort using the power of Array.sortOn()
        xmlArray.sortOn('order',$options);

        //create a new XMLList with sorted XML
        var sortedXmlList:XMLList = new XMLList();
        var xmlObject:Object;
        for each(xmlObject in xmlArray )
        {
            sortedXmlList += xmlObject.data;
        }

        if($copy)
        {
            //don't modify original
            return  $xml.copy().setChildren(sortedXmlList);
        }
        else
        {
            //original modified
            return $xml.setChildren(sortedXmlList);
        }
    }

由于某种原因,这并没有正确地改变我正在使用的属性的对象顺序。

以下是它被称为的地方:

            trace(this.pActiveItemXML);
            trace(sortXMLByAttribute(this.pActiveItemXML, 'quantity', Array.DESCENDING | Array.NUMERIC, true));

这是第一个和第二个跟踪的跟踪声明。你可以看到它正在改变它们的顺序,但不是按“数量”的数字顺序:

TRACE 1:

 <name>My Room</name>
  <object>
    <type>Table</type>
    <id>mc_table001</id>
    <library>mc_table001</library>
    <ondisplay>1</ondisplay>
    <quantity>4</quantity>
  </object>
  <object>
    <type>Pillow</type>
    <id>cushion001</id>
    <library>cushion_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>4</quantity>
  </object>
  <object>
    <type>Pillow</type>
    <id>cushion002</id>
    <library>cushion_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>3</quantity>
  </object>
  <object>
    <type>Lamp</type>
    <id>lamp001</id>
    <library>lamp_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>3</quantity>
  </object>
  <object>
    <type>Lamp</type>
    <id>lamp002</id>
    <library>lamp_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>2</quantity>
  </object>
  <object>
    <type>Lamp</type>
    <id>lamp003</id>
    <library>lamp_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>4</quantity>
  </object>
</wardrobe>

TRACE 2:

<object>
    <type>Pillow</type>
    <id>cushion002</id>
    <library>cushion_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>3</quantity>
  </object>
  <object>
    <type>Table</type>
    <id>mc_table001</id>
    <library>mc_table001</library>
    <ondisplay>1</ondisplay>
    <quantity>4</quantity>
  </object>
  <object>
    <type>Pillow</type>
    <id>cushion001</id>
    <library>cushion_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>4</quantity>
  </object>
  <name>My Room</name>
  <object>
    <type>Lamp</type>
    <id>lamp001</id>
    <library>lamp_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>3</quantity>
  </object>
  <object>
    <type>Lamp</type>
    <id>lamp002</id>
    <library>lamp_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>2</quantity>
  </object>
  <object>
    <type>Lamp</type>
    <id>lamp003</id>
    <library>lamp_group01</library>
    <ondisplay>1</ondisplay>
    <quantity>4</quantity>
  </object>
</wardrobe>

如果有人能够对我出错的地方有所了解,那将会受到大力赞赏。

0 个答案:

没有答案