仕事で使用するプログラムがあり、そのデータを XML ファイル (いくつか) に出力します。これらのファイルを読み取ってデータを処理するための HTA (はい、HTA です。申し訳ありません) を開発しようとしています。残念ながら、多数の XML ファイルがあり、いくつかの特定のファイルのみを読み取る必要があるため、一般的な「XML から配列へ」関数を記述しようとしています。
XMLファイルを読み取るようになりましたが、ファイルを2次元配列に処理したいと考えています。ただし、再帰関数を使用しているため、データが失われているようです。関数は次のとおりです。
NodesToArray = function (xmlDOC){
//Must redeclare "i" with each recursion, or it won't work correctly. ie: for(VAR i = 0...
for(var i = 0; i < xmlDOC.length ; i++){
//Just because it has a child still do the check.
if(xmlDOC[i].childNodes.length > 1){
//Recursively run the function.
var ReturnArray = NodesToArray(xmlDOC[i].childNodes);
//alert(ReturnArray + " " );
if(ReturnArray) return ReturnArray;
}else{
//Check to see if the node has a child node, if not and a child node is called, it will error out and stop
if(xmlDOC[i].hasChildNodes() == true){
return xmlDOC[i].firstChild.nodeValue;
}
}
}
}
最初の子の値を返す場所にアラートを設定し、必要なすべてのデータを表示できました。もちろん、セットアップすると、データが保持されていないことがわかりました。私はたくさんの読書をしましたが、机に頭をぶつけていますが、まだ何も思いつきません.
私はグーグルで検索し、このサイトを検索し、多くのフォーラムに相談しましたが、私にとってうまくいくものは何も見つかりません. 私は行き止まりにあるので、しぶしぶここに投稿します。ご協力いただきありがとうございます。可能な限り追加情報を提供します。
ただのメモですが、ライブラリ(具体的にはjQuery)なしでこれを実行できるようにしたいと考えています。HTA は、新しい Javascript の多くをサポートしていないようです。私は決してプロのコーダーではなく、すべてをゼロから行うことで学習します。
解決策の設定方法がわからないが、見つけた
function NodesToArray(xmlDOC, returnArray){
for(var i = 0; i < xmlDOC.length ; i++){
if(xmlDOC[i].childNodes.length > 1){
returnArray[returnArray.length] = NodesToArray(xmlDOC[i].childNodes, []);
}else{
if(xmlDOC[i].hasChildNodes() == true){
returnArray[returnArray.length] = (xmlDOC[i].firstChild.nodeValue);
}
}
}
return returnArray;
}
getArray = NodesToArray(getXML.getElementsByTagName(tagName)[0].childNodes,[]);
助けてくれてありがとう!