javascript - 为什么 XMLDocument.evaluate 在此 WMS GetCapabilities 文档中找不到节点
问题描述
我正在尝试解析来自这个XML Document的信息。
下面的 JavaScript 适用于简单的 XML 测试文档,但我找不到可以从真实文档中返回任何节点的 XPath。
他的想法只是列出 WMS GetCapabilities XMl 文档中的所有“层”节点。
我究竟做错了什么?
谢谢,下面的代码。
<html>
<body>
<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(xhttp.responseText, "text/xml");
var iterator = xmlDoc.evaluate('Layer', xmlDoc.documentElement, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
var thisNode = iterator.iterateNext();
while (thisNode) {
documemnt.console.log(thisNode.textContent);
thisNode = iterator.iterateNext();
}
}
};
xhttp.open("GET", "https://geo.weather.gc.ca/geomet?service=WMS&request=GetCapabilities", true);
xhttp.send();
</script>
</body>
</html>
解决方案
我认为您需要学习如何考虑默认命名空间,使用evaluate
函数的第三个参数将您可以自由选择的前缀映射到诸如Layer
orTitle
元素等元素所在的命名空间,并在 XPath 表达式中使用该前缀:
var req = new XMLHttpRequest();
req.open('GET', 'https://geo.weather.gc.ca/geomet?service=WMS&request=GetCapabilities');
req.onload = function() {
var doc = this.responseXML;
var namespaces = { wms: 'http://www.opengis.net/wms' };
var result = doc.evaluate(
'/wms:WMS_Capabilities/wms:Capability//wms:Layer/wms:Title',
doc,
function(prefix) { return namespaces[prefix]; },
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null);
var ol = document.createElement('ol');
for (var i = 0; i < result.snapshotLength; i++) {
var li = document.createElement('li');
li.textContent = result.snapshotItem(i).textContent;
ol.appendChild(li);
}
document.body.appendChild(ol);
};
req.send();
推荐阅读
- button - Netsuite:如何将“addMarkAllButtons()”缩小为仅包含一组按钮?
- vb.net - 调用存储在访问表中的 vb.net 函数
- vb.net - 重新打开应用程序时保留最新的组合框选择
- php - 从不同文件夹中的不同页面获取输入名称
- php - 在 Laravel Eloquent 中加入两个模型
- laravel - 使用 laravel Sanctum 和 api 令牌身份验证获取用户时出现 401(未经授权)
- javascript - JSON jQuery 刷新
- java - Spring Cloud Config Server:错误:没有这样的标签:master
- video-streaming - 如何解决使用 SimpleWebRTC 直播视频的问题?
- ios - MacOS Catalina Simulators 屏幕保护程序捕获相同的屏幕