私は、XML ドキュメントを受け取り、(必要に応じて) 多次元の連想配列を作成する Javascript 関数に取り組んでいます。関数内では、配列は適切に構築されますが、Array オブジェクトを返すと、空の配列が返されます。
興味深いことに、push メソッドを使用して、代入演算子 (array[index]=value) を使用するのではなく {"index": index, "value":value} の形式でリテラル配列をプッシュすると、問題なく動作します。
テストのために、次の XML ノード オブジェクト (Level_1_node) を使用しています。
<Level_1>
<Level_2>VALUE</Level_2>
</Level_1>
関数は次のとおりです。
function get_array_from_XML(XML_node){
var XML_array = new Array();
var child_node;
for(var i=0; i<XML_node.childNodes.length; i++){
child_node = XML_node.childNodes[i];
if(child_node.childNodes[0]){
if (child_node.childNodes[0].nodeType == 3){
XML_array[child_node.nodeName] = child_node.childNodes[0].nodeValue;
} else {
XML_array[child_node.nodeName] = get_array_from_XML(child_node);
}
}
}
dump(XML_array); //for my debugging, alerts "LEVEL_2 => VALUE", so everything seems fine
return XML_array;
}
次のメソッドは機能しますが、戻り形式は望ましくありません。
function get_array_from_XML_using_push(XML_node){
var XML_array = new Array();
var child_node;
for(var i=0; i<XML_node.childNodes.length; i++){
child_node = XML_node.childNodes[i];
if(child_node.childNodes[0]){
if (child_node.childNodes[0].nodeType == 3){
XML_array.push({
"index" : child_node.nodeName,
"value" : child_node.childNodes[0].nodeValue
});
} else {
XML_array.push({
"index" : child_node.nodeName,
"value" : get_array_from_XML_using_push(child_node)
});
}
}
}
dump(XML_array); //shows the fully populated array
return XML_array;
}
実行するget_array_from_XML(Level_1_node)
と、空の配列がget_array_from_XML_using_push(Level_1_node)
返されますが、返されます
{0 => {"index" => "Level_2", "value" => "VALUE"}}
とてもイライラします。どんな洞察も大歓迎です。