gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:55:40 29 4
gpt4 key购买 nike

在 Python 中解析 xml 文件(在这种情况下为 svg)很方便,但是一旦涉及到命名空间,就没有任何作用。使用 Pythons xml 库的正确方法是什么?

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

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">

回复是: []
如果我尝试打印 root我明白了:
<Element '{http://www.w3.org/2000/svg}svg' at 0x7fbc45154ea8>

而不是这个:
<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)

关于Python:使用命名空间解析 SVG/XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56737590/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com