Python:使用名称空间解析SVG/XML

Python:使用名称空间解析SVG/XML,python,xml,parsing,svg,namespaces,Python,Xml,Parsing,Svg,Namespaces,用Python解析xml文件(本例中为svg)很方便,但只要涉及到名称空间,就什么都不起作用。使用pythonsxml库的正确方法是什么 如果我的文件没有名称空间,我可以轻松地执行以下代码并获取所有元素: import xml.etree.ElementTree as ET tree = ET.parse('model1.svg') root = tree.getroot() lst = root.findall('g/g/g/g') print(lst) 但由于它有一个名称空间: <

用Python解析xml文件(本例中为svg)很方便,但只要涉及到名称空间,就什么都不起作用。使用pythonsxml库的正确方法是什么

如果我的文件没有名称空间,我可以轻松地执行以下代码并获取所有元素:

import xml.etree.ElementTree as ET
tree = ET.parse('model1.svg')  
root = tree.getroot()
lst = root.findall('g/g/g/g')
print(lst)
但由于它有一个名称空间:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="temp" width="1809.6200256347656" height="1247.809829711914" version="1.1" viewBox="0 0 1809.6200256347656 1247.809829711914">
与此相反:

<Element 'svg' at 0x7f8ee9377368>


所以我就是不能用它。如何停用/忽略它?

解决方案是使用xml标记(例如,
g
)和预定义命名空间数组中的前缀:

import xml.etree.ElementTree as ET
tree = ET.parse('./model1.svg')
root = tree.getroot()

ns_array = {
    'svg': 'http://www.w3.org/2000/svg', 
    'xlink': 'http://www.w3.org/1999/xlink'
    }

lst = root.findall('svg:g/svg:g/svg:g/svg:g', ns_array)
看见
import xml.etree.ElementTree as ET
tree = ET.parse('./model1.svg')
root = tree.getroot()

ns_array = {
    'svg': 'http://www.w3.org/2000/svg', 
    'xlink': 'http://www.w3.org/1999/xlink'
    }

lst = root.findall('svg:g/svg:g/svg:g/svg:g', ns_array)