【发布时间】:2010-06-23 13:08:22
【问题描述】:
我在 javascript 中通过 E4x 检索属性值时遇到问题。
假设一个如下的 XML 节点列表作为 XMLObject:
<node att1="value1" att2="value2" att3="value3" att4="value4">
<nodeChild><!CDATA[/* ... */]></nodeChild>
/* more node childs */
</node>
我使用attributes() 方法正确访问了节点(在循环中)及其属性节点:
var attributes = node[n].attributes() ;
for(var n = 0 ; n < attributes.length() ; n++) {
var name = attributes[n].name() ;
var value = attributes[n].toString() ;
//.. handle the values
}
现在,一方面,名称和值没有充分返回 value(n) 返回 name(n+1) 的值,即 att1 的值将是 value2 ;如果我设置var value = attributes[ (n+1) ].toString() 值会正确返回,但第一个值将返回undefined。
可能我只是对这个很感兴趣。那么,有没有人指出我缺少什么?
TIA,
FK
【问题讨论】:
-
我不确定这里发生了什么,但“name”真的是一个函数,而不仅仅是一个简单的字符串吗?
-
是的,它是——E4X 很奇怪,并且与您期望的普通 DOM 或 JS 对象的行为方式不同。该示例对我来说很好,除了不清楚
n来自node[n].attributes()的位置。当然,如果//.. handle the values更改属性,则可能存在破坏性迭代问题。 -
以上为伪代码。我的用例(Java 类中使用的 Rhino 中的 JS xml 解析函数)要复杂得多,所以我抽象了这个问题。我应该这么说的。对不起。
-
@Pointy:
name()是 E4X 中 XMLObject 的一种方法,它产生节点名称。在本例中为属性名称。 -
@bobince:我没有更改值。如果循环语法中没有明显的错误,则错误必须在代码中的其他位置。我会通过它并且——以防万一——将发布额外的代码。谢谢。
标签: javascript iteration attributes undefined e4x