我在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
}
现在,对于一个,名称和值没有充分返回值(n)返回name(n + 1)的值,即att1
的值将是value2
;如果我设置var value = attributes[ (n+1) ].toString()
,则会正确返回值,但第一个值将返回undefined
。
可能我只是密集在这一个。那么,有没有人对我所缺少的东西有任何指示?
TIA,
FK
答案 0 :(得分:2)
您的代码对我有用,除了我确定在您的实际XML中不存在的这些问题,因为您能够解析并遍历它们:
<![CDATA[..]]>
/* more node childs */
使XML无效n
替换为0
,或者完全不使用这是我用来迭代节点属性的确切代码。
var node = <node att1="value1" att2="value2" att3="value3" att4="value4">
<nodeChild><![CDATA[/* ... */]]></nodeChild>
</node>;
var attributes = node[0].attributes() ;
for(var n = 0 ; n < attributes.length() ; n++) {
var name = attributes[n].name() ;
var value = attributes[n].toString() ;
console.log("%s = %s", name, value);
}
// log output
// att1 = value1
// att2 = value2
// att3 = value3
// att4 = value4
请注意,E4X提供了一种更简洁的上述方式(与JavaScript 1.6中引入的for each in
相结合):
for each(var attribute in node.@*) {
var name = attribute.name();
var value = attribute.toString();
}
由于您指的是XML对象,因此无需像node[0]
中那样通过索引引用根元素。您只需撰写node
。