我正在尝试按属性在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>
如果有人能够对我出错的地方有所了解,那将会受到大力赞赏。