使用括号表示法,我可以使用以下代码按名称或属性访问直接子节点:
示例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
答案 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来解决它。