繁体   English   中英

为什么XMLDocument.evaluate在此WMS GetCapabilities文档中找不到节点

[英]Why doesn't XMLDocument.evaluate find nodes in this WMS GetCapabilities document

我正在尝试解析此XML文档中的信息

下面的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函数的第三个参数来映射前缀,您可以自由选择名称空间,例如LayerTitle元素所在的元素,并在其中使用该前缀您的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(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM