【发布时间】:2021-11-13 23:31:33
【问题描述】:
首先我想说的是,我知道有很多与此问题相关的类似问题(在堆栈和其他网站上),但过去几个小时我一直在搜索互联网的每一个角落而且还在干涸。
作为参考,我查看了以下提供了一些指导的网站,但通常让我比以前更加困惑:
https://humanwhocodes.com/blog/2009/03/24/xpath-in-javascript-part-2/
Javascript Xpath and default namespaces
Give me an example of performing an xpath query on a KML document, from Javascript
XPath and Namespaces
好的,进入问题。我正在使用 Javascript 和 XPath 来尝试读取 KML 文件。我使用FileReader获取XML文件的内容,然后使用下面的代码尝试访问里面的XML节点。
const xmlParser = new DOMParser();
const xml = xmlParser.parseFromString(contents,"text/xml"); // Contents variable contains the contents of the file (as read by FileReader)
// Read XML
if (xml.evaluate) {
// Most major browsers (except IE)
var path = "/kml/Document/Folder[1]/Placemark/Point/coordinates";
var evaluator = new XPathEvaluator();
var resolver = evaluator.createNSResolver(xml.documentElement);
var nodes = xml.evaluate(path, xml.documentElement, resolver, XPathResult.ANY_TYPE, null);
var result = nodes.iterateNext();
while (result) {
console.log(result);
result = nodes.iterateNext();
}
}
我的 KML 文件开头为:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>-/XDF</name>
据我了解,xmlns 属性定义了命名空间。当我从节点中删除此属性时(因为文件不再使用命名空间),我的 Javascript 代码按预期工作,这让我相信问题在于我没有为 XPath 定义正确的命名空间来使用。
resolver 变量是我从上面链接的站点之一复制的。我试图找到有关如何生成命名空间解析器的正确参考,但找不到适用于我的 KML 文件的内容。
在这方面有更多经验的人能指出正确的方向来生成允许我读取 KML 文件的命名空间对象吗?
【问题讨论】:
标签: javascript xml xpath namespaces kml