【问题标题】:How do I make Flex create one-element arrays from XML data?如何让 Flex 从 XML 数据创建单元素数组?
【发布时间】:2009-11-02 14:29:55
【问题描述】:

我通过 HttpService 在 Flex 中检索 XML 数据。我将 HttpService 实例上的 resultFormat 属性设置为 HTTPService.RESULT_FORMAT_OBJECT。结果包含类似这样的数据:

<!-- ... -->
<children>
  <item><!-- ... --></item>
  <item><!-- ... --></item>
  <!-- ... -->
<children>
<!-- ... -->

当有多个item 同级时,我在子元素下得到一个名为 item 的数组。如果只有一个,则转换无法将其与标量区分开来。

要让 Flex 将所有 item 元素转换为包含 0 个或更多元素的数组,我需要进行哪些更改?

我需要做什么才能获得数组成员 children,完全删除 item 包装器?

XML 由服务器端的 Struts 生成。我总是可以选择在那里更改文档的结构,但现在我对 Flex 可以做什么很感兴趣。

【问题讨论】:

    标签: xml apache-flex actionscript-3


    【解决方案1】:

    item 对象应该是一个XMLList,无论是一个条目还是多个条目。 (如果没有,则为undefined。)

    如果只有一个元素,您可以在其上使用XML 方法,但这只是为了方便。请参阅XMLList documentation

    我还推荐 Mike Morearty 对这个 blog entry 发表评论 5(缓存版本,因为该网站似乎无法访问)。

    【讨论】:

    • 那个链接很好。那么,基本的收获就是使用 e4x 结果,对吧?
    【解决方案2】:

    试试这个:

    try {
        for (var i:int = 0; /* loop forever till error is thrown */; i++) {
            var j:String = String( children.item[ i ].SomeOtherAttribute ); // if its a string
        }
    } catch (re:RangeError) {
    }
    

    【讨论】:

    • 我不明白。这段代码应该做什么?另外,请允许我对似乎轻微滥用异常的行为皱眉。 (如果我可以做 item[i],确定有 item.length 用于循环条件,不是吗?)
    • 我在构建原型时遇到了这个问题。长度属性不存在。几分钟后,我想到了这个解决方案,并且效果很好。我从来没有说过“这是完美的解决方案”,只是“试试这个”。我需要尽快解决这个问题。我不能来,问一个问题,然后等待答案。因此,我使用了对我有用的东西。如果原型有效并且人们喜欢它,那么我可以考虑让它为生产做好准备,然后我可以用更好的东西替换这段代码。到那时,我认为没有必要担心纯度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多