我有一个有效的递归函数,该函数通过XML文档查找匹配的节点名称,然后记录匹配的值...我正在尝试对其进行修改以返回字符串或数组,并且可以没关系。
这是在Google Apps脚本中。我尝试将一个空白字符串传递到该函数中,然后在最后将其返回,但它不起作用。这是可用的Logger函数:
function logChildren(elements, dataRequired){
for (var i = 0; i < elements.length; i++) {
if (elements[i].getName() == dataRequired){
Logger.log(elements[i].getText());
}
if(elements[i].getContentSize() > 1){
var children = elements[i].getChildren();
logChildren(children, dataRequired);
}
}
};
我尝试传递一个空字符串,然后像这样返回它,但它不起作用:
function logChildren(elements, dataRequired, str){
for (var i = 0; i < elements.length; i++) {
if (elements[i].getName() == dataRequired){
str = str + ", " + elements[i].getText();
}
if(elements[i].getContentSize() > 1){
var children = elements[i].getChildren();
logChildren(children, dataRequired, str);
}
}
return str
};
如何获取此函数的字符串或数组OUT,而不仅仅是控制台记录它?
答案 0 :(得分:0)
不返回str而不尝试它,因为str将具有所有值。如果返回str,则它可能会使当前迭代折叠。请让我们知道这是否有效
答案 1 :(得分:0)
提供您的元素已被解析且有效,这应该可以工作。
function logChildren(elements, dataRequired){
values = [];
req = elements.getElementsByTagName(dataRequired);
for (var i = 0; i < req.length; i++) {
values.push(req[i].childNodes[0].nodeValue);
}
return values
};
elements = "<house>" +
"<name>hello</name>" +
"<town>world</town>" +
"<name>cat</name>" +
"<folder>" +
"<name>kitty</name>" +
"</folder>" +
"</house>";
p = new DOMParser();
elements = p.parseFromString(elements, "text/xml");
newValues = logChildren(elements, "name")
console.log(newValues);
我包含了我自己的小xml只是为了测试,它返回一个数组。
如您所见,getElementsByTagName甚至返回子文件夹中的值。
答案 2 :(得分:0)
您应该使用全局变量或其他函数,以使输出变量str
在递归函数的范围之外。
var str = "";//holds all data of recursion
function logChildren(elements, dataRequired){
..
str += ", " + elements[i].getText();
..
}