【发布时间】:2020-09-18 08:43:55
【问题描述】:
我正在尝试读取 XML 文件的内容。可能这是基本的 JS 东西,但我似乎无法让它工作。
我正在使用 Chrome 的实验性 Native File System 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'); 与文件读取。如果我直接从输入加载文件并使用FileReader(),我能够获取内容并解析它,但是使用“目录”方法我得到空值(对于评估的文档),就像这样Uncaught (in promise) TypeError: Cannot read property 'childNodes' of null
Edit 这是我在控制台中获得的 xmlFile 变量。我只需要从中获取内容(文本格式的 XML)
【问题讨论】:
-
你能把 subject.xml 文件的内容贴出来,让我们看看为什么 xml 的结构无效吗?
-
只是为了让您同时朝着正确的方向前进。 myXpathFce('nodeInXML') 函数返回在 XML 文档中找不到的 XPath。
-
xpath 已经过测试并且运行良好(如果通过输入以标准方式加载 xml)。 xpath 是这样的(那里的命名空间):
//*[local-name()='name'][contains(., 'Comments')]/following-sibling::*[local-name()='data']和 xml 部分:<field><name>Comments</name><data>123</data></field>
标签: javascript file google-chrome dom native-file-system-api-js