0

JavaScript で E4x を介して属性値を取得する際に問題があります。

XMLObject として次のような XML ノードのリストがあるとします。

<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ます。

可能性があります私はこれに夢中です。だから、誰かが私が欠けているものへのポインタを持っていますか?

ティア、

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 に答える