用Python lxml.etree反转元素的嵌套

1 投票
1 回答
502 浏览
提问于 2025-04-17 06:32

我在找一个用Python的lxml.etree库的做法,想把元素的嵌套关系反转,也就是把:

<text>
    <name>
        <ref>foobar</ref>
    </name>
</text>

变成:

<text>
    <ref>
        <name>foobar</name>
    </ref>
</text>

我觉得这个应该很简单,但我就是想不出来。

1 个回答

2

像这样吗?

import lxml.etree as et
from lxml.builder import E

xml = """
<text>
    <name>
        <ref>foobar</ref>
    </name>
</text>
"""

tree = et.fromstring(xml)

for name in tree.findall('name'):
    text = name.find('ref').text
    tree.replace(name, E.ref(E.name(text)))

print et.tostring(tree)

撰写回答