我有一个我们在工作中使用的程序,它将其数据输出到 XML 文件(其中几个)。我正在尝试开发一个 HTA(是的 HTA,我很抱歉)来读取这些文件并处理它们的数据。不幸的是,有许多 XML 文件,我只需要阅读一些特定的文件,所以我正在尝试编写一个通用的“XML 到数组”函数。
我得到它来读取 XML 文件,现在我想将文件处理成二维数组。但是,由于我使用的是递归函数,我似乎丢失了数据。这是功能:
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,[]);
谢谢您的帮助!