【发布时间】:2021-07-28 04:44:27
【问题描述】:
我正在尝试提取 WMS 服务器可用层的名称列表。我已经为 GeoMet WMS 这样做了,方法是发送一个 GetCapabilities,它返回一个“应用程序/xml”对象,然后我使用 DOM 解析器进行解析。我的问题是图层标签嵌套在两个级别上。基本上顶层层包含多个子层。我将如何仅提取父层的子层或列表。通过意识到子节点具有父节点没有的属性,我设法解决了这个问题,但必须有更好的方法。
编辑:我有兴趣获取可以添加到交互式地图的完整图层列表。基本上所有没有图层子级的图层标签。
axios.get('https://geo.weather.gc.ca/geomet?lang=en&service=WMS&version=1.3.0&request=GetCapabilities').then((response) => {
// console.log(response.headers)
const parser = new DOMParser()
const dom = parser.parseFromString(response.data, 'application/xml')
let layerGroups = dom.querySelectorAll('[cascaded="0"]')
let layerNames = []
layerGroups.forEach(function (domel) { layerNames.push(domel.getElementsByTagName('Name')[0].innerHTML) })
console.log(layerNames.length)
this.mylayerlist = layerNames
})
【问题讨论】:
-
你可以使用
querySelectorAll('[cascaded="0"] name').map(node => node.innerHTML)来简化它 -
您的问题不清楚 - 您是否对
CGSL.ETA_ICEC SEA_ICECONC-LINEAR, SEA_ICECONC, CGSL.ETA_ICEPRS等名称感兴趣(其中有 12,470 个...)或其他名称? -
@PhilipRollins 感谢您抽出宝贵时间,但不幸的是,这只是一个 hack,因为并非所有 WMS 都具有与 Layer 标签关联的属性。理想情况下,无论我查询哪个 WMS,我都会以这种方式获取所有没有图层子节点的图层节点,我将获得可添加到地图的图层的完整列表。
-
@JackFleeting 感谢您抽出宝贵时间,并对不完整的问题表示歉意。我的意思是说我想要任何给定 WMS 的所有层,或者换句话说,如果我传入一个 URL,我会得到没有层子节点的层节点的完整列表。是的 CGSL.ETA_ICEC 和其他。
标签: javascript arrays xml dom wms