Skip to content

Instantly share code, notes, and snippets.

@jorgejesus
Created November 30, 2022 14:30
Show Gist options
  • Save jorgejesus/9688ee27a314e9fac252e721c4e0dda9 to your computer and use it in GitHub Desktop.
Save jorgejesus/9688ee27a314e9fac252e721c4e0dda9 to your computer and use it in GitHub Desktop.
lxml namespace map example using OWSLib
# python version 3.10.7
from owslib.wms import WebMapService # owslib.__version__ == '0.27.2'
from lxml import etree # lxml.__version__== '4.9.1'
parser = etree.XMLParser(resolve_entities = False, strip_cdata = True, recover=True, ns_clean=True)
url = 'https://maps.isric.org/mapserv?map=/map/wrb.map'
wms = WebMapService(url, version='1.3.0')
service_xml = wms.getServiceXML()
tree = etree.XML(service_xml, parser = parser)
ns_dic = tree.nsmap # {None: 'http://www.opengis.net/wms', 'sld': 'http://www.opengis.net/sld', 'xsi': 'http://www.w3.org/20...a-instance', 'ms': 'http://mapserver.gis.../mapserver'}
ns_dic["_"] = ns_dic.pop(None) # Default namespace is 'wms':'http://www.opengis.net/wms'
root=tree.getroottree()
# _ is set to be the default namespace we could have use something else, like 'wms'
meta_els = root.xpath('//_:MetadataURL',namespaces = ns_dic) # [<Element {http://www.opengis.net/wms}MetadataURL>]
print(meta_els)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment