gpt4 book ai didi

javascript - 如何在 Javascript XPath 中为 KML 文件生成命名空间

转载 作者:行者123 更新时间:2023-12-04 16:55:22 27 4
gpt4 key购买 nike

我想首先说我知道有很多类似的问题(在堆栈和其他网站上)与这个问题有关,但我花了几个小时搜索互联网的每个 Angular 落和缝隙,但仍然快干了。
作为引用,我检查了以下提供了一些指导的网站,但通常让我比以前更加困惑:
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 文件?

最佳答案

感谢@dandavis 的提示。
我需要创建一个单独的函数来返回固定的命名空间:

function resolver() {
return 'http://www.opengis.net/kml/2.2';
}
并使用 myns: 引用我的 XPath 路径每个节点的前缀。
var path = "//myns:Document/myns:Folder[1]/myns:Placemark/myns:Point/myns:coordinates";
下面是修改后的例程(引用了上面的 resolver 函数),以防它对其他人有帮助:
const xmlParser = new DOMParser();
const xml = xmlParser.parseFromString(contents,"text/xml");

// Read XML
if (xml.evaluate) {
// Most major browsers (except IE)
var path = "//myns:Document/myns:Folder[1]/myns:Placemark/myns:Point/myns:coordinates";

var nodes = xml.evaluate(path, xml.documentElement, resolver, XPathResult.ANY_TYPE, null);
var result = nodes.iterateNext();
while (result) {
console.log(result);
result = nodes.iterateNext();
}
}

关于javascript - 如何在 Javascript XPath 中为 KML 文件生成命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69251350/

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