【发布时间】:2021-10-18 10:50:46
【问题描述】:
我创建了一个网站,您可以在其中导入 XML 文件,然后将其读出。它适用于大多数文件,但我尝试使用 730MB 的 XML 文件,但它不再工作了。我似乎没有在控制台上收到任何错误,但如果我使用此代码,
numberOfReports = xmlDoc.getElementsByTagName("DailyReport").length;
我总是得到 0,即使它应该远不止这些,因为 XML 文件肯定包含多个 <DailyReport> 元素。我导入和解析文件的函数如下所示:
// Function to import and serialize the XML file
function import_XML() {
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
// getting a hold of the file reference
file = e.target.files[0];
// setting up the reader
var reader = new FileReader();
reader.readAsText(file, 'UTF-8');
// Tell the reader what to do when it's done reading
reader.onload = readerEvent => {
content = readerEvent.target.result;
const parser = new DOMParser();
xmlDoc = parser.parseFromString(content, "application/xml");
console.log(xmlDoc.documentElement.nodeName == "parsererror" ? "Error while parsing XML File" : xmlDoc.documentElement.nodeName);
console.log("content: " + content);
// Number of reports in the XML file
numberOfReports = xmlDoc.getElementsByTagName("DailyReport").length;
console.log("number of daily reports: " + numberOfReports);
updateTable();
}
}
input.click();
}
我在控制台中从content = readerEvent.target.result;得到的内容也是空的:
我不确定是不是因为文件太大,但是 XML 文件应该没有任何畸形。谁能帮我解决这个问题?非常感谢任何帮助!
【问题讨论】:
-
在寻求帮助时,请花时间缩进并格式化您的代码,使其可读。仅阅读部分缩进的代码真的很难。 (我已经通过一个基本的格式化程序为你运行了代码。)
-
从您的控制台屏幕截图中,
content看起来是一个空字符串。这与nodeName显示为"html"是一致的(当我使用(new DOMParser().parseFromString("", "application/xml")).documentElement.nodeName时我明白了)。所以问题是:为什么字符串是空的? (另外:你在哪里声明content?) -
我将文件顶部的内容声明为
var content;,以便我可以在其他函数中访问它。至于为什么字符串是空的,我真的不知道。对于工作 XML 文件,内容将整个 XML 作为字符串返回。
标签: javascript html xml xml-parsing