且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用lxml从python中的xml中删除名称空间和前缀

更新时间:2023-10-01 20:36:46

按照Uku Loskit的建议替换标签.除此之外,请使用 lxml.objectify.deannotate .

Replace tag as Uku Loskit suggests. In addition to that, use lxml.objectify.deannotate.

from lxml import etree, objectify

metadata = '/Users/user1/Desktop/Python/metadata.xml'
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(metadata, parser)
root = tree.getroot()

####    
for elem in root.getiterator():
    if not hasattr(elem.tag, 'find'): continue  # (1)
    i = elem.tag.find('}')
    if i >= 0:
        elem.tag = elem.tag[i+1:]
objectify.deannotate(root, cleanup_namespaces=True)
####

tree.write('/Users/user1/Desktop/Python/done.xml',
           pretty_print=True, xml_declaration=True, encoding='UTF-8')

更新

某些标签,例如Comment,在访问tag属性时会返回一个函数.为此增加了一个警卫. (1)

Some tags like Comment return a function when accessing tag attribute. added a guard for that. (1)