提问人:macxpat 提问时间:5/1/2023 最后编辑:macxpat 更新时间:5/1/2023 访问量:55
XML : lxml.etree - findall() 当文档元素具有属性时
XML : lxml.etree - findall() when document element has attributes
问:
.findall()
当 document 元素具有属性时,找不到任何内容。为什么会出现这种行为以及如何解决?
代码如下:
from lxml import etree as et
text = '''\
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\
<text class="what1 y2">abc</text><text class="what17 x1">nbc</text>\
<text class="f18 sf4 f12" textLength="72.18">ID_NUM.47</text></svg>'''
tree = et.fromstring(text)
for elem in tree.findall(".//text"):
if elem.text == "ID_NUM.47":
elem.getparent().remove(elem)
print(et.tostring(tree))
tree.findall(".//text")
返回一个空列表。
但是在以下文档中,删除了标签属性,可以找到所有元素:svg
text = '''\
<svg><text class="what1 y2">abc</text><text class="what17 x1">nbc</text>\
<text class="f18 sf4 f12" textLength="72.18">ID_NUM.47</text></svg>'''
此外,当替换为 例如时,所有元素都与两个文档一起找到。.findall()
.xpath('//*[attribute::textLength]')
答:
2赞
Martin Honnen
5/1/2023
#1
这些是命名空间声明属性,所以如果你想在命名空间中选择一个元素,你需要考虑命名空间,lxml 允许它,例如 .for elem in tree.findall(".//text", namespaces={'':'http://www.w3.org/2000/svg'})
评论