обратное вложение элементов с помощью Python lxml.etree - PullRequest
1 голос
/ 18 ноября 2011

Я ищу рецепт для lxml.etree Python, который обратит вложенность элементов, превращая:

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

в:

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

У меня есть чувствоэто очевидно, но я этого не вижу.

1 Ответ

2 голосов
/ 18 ноября 2011

Как то так?

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)
...