繁体   English   中英

灵活排序XMLListCollection子元素

[英]Flex sorting of XMLListCollection subelements

在Flex Webapp中,是否有一种简单的方法可以根据子级的属性对XML元素的子级进行排序? 示例如下:

XMLListCollection:

<a anotherProp="ABCDE">
<e prop="AB">1</element>
<e prop="BC">2</element>
</a>
<a anotherProp="FGEH">
<e prop="HF">3</element>
<e prop="AD">4</element>
<e prop="AC">5</element>
</a>

我想根据它们的“ prop”属性在每个<a>元素中分别对<e>元素进行排序。 我用于生成包含<a>元素的数组的代码如下:

for each(var node:XML in initialInput:XMLListCollection){
  if(node.localName()=="a"){
    //I was hoping to be able to sort the <e> children of the node variable here
    xmlListCollectionVar.addItem(node);
  }
}

最后,我希望<a>保持其定义的顺序,但根据<e> prop>属性对它们的<e>子级进行排序。 到目前为止,如果我尝试:

node.children()。sort = someSortVar

someSortVar的字段设置为:

SortFields(“ e。@ prop”,...)

我收到有关空值的异常。 有什么方法可以将子级列表转换为XMLListCollection,对其进行排序并将其重新集成到node变量中? 感谢您的任何答复。

您可以将数组上的sort函数与compareFunction一起使用。

... args-用于指定比较函数和确定排序行为的一个或多个值的参数。 此方法使用语法和参数顺序Array.sort(compareFunction,sortOptions) ,参数定义如下:

compareFunction-一个比较函数,用于确定数组中元素的排序顺序。 此参数是可选的。 比较函数应采用两个参数进行比较。 给定元素A和B,compareFunction的结果可以具有以下三个值之一:-1,如果A应该在排序序列中出现在B之前0,如果A等于B 1,如果A应该出现在排序之后的B之后sequence sortOptions-一个或多个数字或定义的常量,用|分隔 (按位或)运算符,可将排序行为更改为默认值。 此参数是可选的。 下面的值对于sortOptions是可接受的:1或Array.CASEINSENSITIVE 2或Array.DESCENDING 4或Array.UNIQUESORT 8或Array.RETURNINDEXEDARRAY 16或Array.NUMERIC有关更多信息,请参见Array.sortOn()方法。

在Adobe论坛上找到了合适的代码实现-很抱歉不首先浏览那里。

http://forums.adobe.com/message/72521#72521

我提出了两个解决方案:第一个解决方案涉及将XMLList转换为数组并对该数组进行排序:

  for each (var a:XML in elt..a)
  {
    var children:Array = toArray(a.children());
    children.sortOn("@prop");
    a.setChildren(new XMLList());
    for each (var c:XML in children)
    {
      a.appendChild(c);
    }
  }

第二个涉及使用XMLListCollection的sort属性,尽管我相信<a>子级是XMLList ,而不是XMLListCollection

  var sort:Sort = new Sort()
  sort.fields = [new SortField("@prop")];
  for each (var a:XML in xml..a)
  {
    var xcoll:XMLListCollection = new XMLListCollection(a.children());
    xcoll.sort = sort;
    xcoll.refresh();
    a.setChildren(xcoll.copy());
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM