在AS3中使用方括号阵列访问符号的e4x实现有多少层次?

时间:2011-08-21 04:59:24

标签: xml flex actionscript-3 e4x

使用括号表示法,我可以使用以下代码按名称或属性访问直接子节点:

示例XML:

<item name="item1">
   <categories name="catList">
      <category name="cat1">
   </categories>
</item>

访问直接子节点的示例:

trace(xml["categories"].toString()); // <categories><category/></categories> 

访问节点属性的示例:

trace(xml["@name"].toString()); // item1

已更新:是否可以使用 单个方括号表示法访问子元素/嵌套元素/嵌套属性?

例如,

trace(xml["categories.category.@name"].toString()); // cat1

trace(xml["categories.@name"]); // catList

3 个答案:

答案 0 :(得分:2)

如果您知道要访问的节点的名称,则无需使用方括号表示法。这应该可以正常工作:

xml.categories.category.@name.toString();

方括号表示法用于访问具有字符串名称的属性。它与E4X没有特别的关系。将所有属性转换为方括号表示法将是:

xml['categories']['category']['@name']['toString']();

答案 1 :(得分:1)

您可以这样做:

xml["categories"]["category"][0]["@name"].toString();

XML类实现了类似Proxy的接口。动态属性在使用时会动态解析,这就是您可以调用未在XML类上明确定义的属性的原因。但是,如果你正在做一些动态XML名称的东西,并且需要使用带有字符串的方括号表示法,那么你肯定可以这样做。你只需将每个包装在自己的[]中。

但是,你可以用e4x表示法做一些你不能用[]做的事情。即做这样的事情:

xml..@name

将在整个xml树中找到所有名称属性。我认为没有任何其他方式可以代表这一点。

答案 2 :(得分:0)

根据您对其他答案的评论,似乎这个相当不幸的使用e4x深入Flex SDK而不是您可以改变的东西。在那种情况下,我不得不说我很抱歉,但你很可能会失败。除非你拥有'a'变量并且可以传递它,在这种情况下你可以事先做出选择并将适当的xml片段传递给你正在调用的任何函数。

出于好奇(并且为了得到更好的答案),Flex SDK中的位置是什么?


我根据你的评论查看了SortField,虽然滥用xmlCompare方法的内部结构看起来很麻烦(有点危险),你应该能够通过提供自定义compareFunction来解决它。