我正在尝试读取XML文件的内容。可能这是基本的JS内容,但我似乎无法使其正常工作。
[我正在使用Chrome的实验性本机文件系统API来读取文件夹中的文件夹:
const opts = {type: 'open-directory'};
handle = await window.chooseFileSystemEntries(opts);
const entries = await handle.getEntries();
...
然后,稍后在代码中,我从主目录输入一个文件夹,并尝试读取其中的文件。文件系统结构如下:
Directory > subdirectory > file
并且代码的第二部分看起来像这样:
var subdirHandle = await handle.getDirectory(oneOfTheFolders);
var xmlFile = await subdirHandle.getFile('subject.xml');
xmlDoc = domParser.parseFromString(xmlFile, "text/xml");
parsedNumber = document.evaluate(myXpathFce('nodeInXML'), xmlDoc, null, XPathResult.ANY_TYPE, null).iterateNext();
if(parsedNumber.childNodes.length >0){
...
我相信文件读取在这里是var xmlFile = await subdirHandle.getFile('subject.xml');
。如果我直接从Input加载文件并使用FileReader()
,则可以获取内容并对其进行解析,但是使用“目录”方法,我将得到空值(对于评估文档),例如Uncaught (in promise) TypeError: Cannot read property 'childNodes' of null
我注意到您正在将File对象保存在xmlFile变量中,并将其直接传递到parseFromString方法中。
您不能直接从File对象中解析document对象。您应该首先使用FileReader从File对象读取string。您可以使用下面的readFileAsync函数,使用await关键字从File对象中读取string:
function readFileAsync(file) {
return new Promise((resolve, reject) => {
let reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = reject;
reader.readAsText(file);
})
}
var file = await handle.getFile();
var text = await readFileAsync(file);
var xmlDoc = domParser.parseFromString(text, "text/xml");