0

我在通过 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

4

1 回答 1

2

您的代码对我有用,除了这些我确定在您的实际 XML 中不存在的陷阱,因为您能够解析和迭代它们:

  1. CDATA 声明无效。变成<![CDATA[..]]>
  2. /* more node childs */使 XML 无效
  3. 替换n0,或者完全没有它

这是我用来迭代节点属性的确切代码。

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.6for each in中引入的):

for each(var attribute in node.@*) {
    var name = attribute.name();
    var value = attribute.toString();
}

由于您引用的是 XML 对象,因此无需像在node[0]. 您可以简单地编写node.

于 2010-06-23T18:50:19.563 回答