gpt4 book ai didi

javascript - NodeJS 中 libxmljs 中的 RangeError

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:00 26 4
gpt4 key购买 nike

我正在尝试用 int 值替换冗长的 XML 标签。示例 '' 为 '<1>',因此整个 XML 文件中名称为 'child' 的每个标记都将替换为 '1'。为此,我在 NodeJS 中使用 libxmljs。到目前为止我的代码是;

    var libxml = require('libxmljs');
var xml = '<?xml version="1.0" encoding="UTF-8"?>' +
'<root>' +
'<child foo="bar">' +
'<grandchild baz="fizbuzz">grandchild content</grandchild>' +
'</child>' +
'<child foo="bar1">' +
'<grandchild baz="fizbuzz">grandchild content 1</grandchild>' +
'</child>' +
'<sibling>with content!</sibling>' +
'</root>';


var xmlDoc = libxml.parseXml(xml);
var allxml = xmlDoc.root(); //store all nodes as allxml
var allNodes = xmlDoc.childNodes(); //all child nodes to array
rec(allxml);

function rec(anElement){
for (var j=0; j<allNodes.length;j++ )
{
var firstnode = allNodes[j].name(); //get tagname of the element

var findelem = xmlDoc.find(firstnode); //find similar elements with the tagname to array
var currChild = xmlDoc.child(j); //get current child element
var currnode = xmlDoc.childNodes(); // child nodes of current element to array
if (hasChild(currChild)) { // check whether this has child elements
rec(currChild.childNodes()); //if yes recall this function
}
else{ replaceCurrentTag(findelem, j);} // if no child nodes replace the name
}
}

function replaceCurrentTag(currelem, j){

for (var i=0;i<currelem.length;i++){
currelem[i].name(j.toString());
}
}

function hasChild(xmlElement){
var e = xmlElement.childNodes();
if (e.length > 0){ return true; }
else return false;
}

console.log(xmlDoc.toString());

但是当我在终端中运行它时,我收到此错误。

/home/compaq/node_modules/libxmljs/lib/document.js:0
(function (exports, require, module, __filename, __dirname) { var bindings = r
^
RangeError: Maximum call stack size exceeded

我在这里做错了什么。

请帮忙。谢谢

最佳答案

您的 rec 函数迭代 allNodes,而不是 Node 的某个子集(可能是 anElement 的子 Node )。结合在调用 replaceCurrentTag(永远不会被调用)之前再次递归到 rec 中,您的函数会继续调用 rec 直到填满调用堆栈。

关于javascript - NodeJS 中 libxmljs 中的 RangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com