如何在 Python 中使用 lxml 将一个元素与另一个元素包裹在一起?

How to wrap anything inside an Element with another Element using lxml in Python?

让我们来看看这个例子:

tree_string = '''
<root>
<must_wrap_anything_inside_this_element> asjkdnasd cass'a s' alsdnjl al <g/> 
    'asdasjkdhaisbd'assdaewken jka <x id='3'/> kfa;sdf lasd;f naisb fiuabewf <some_random_tag> random stuff </some_random_tag>
    yet more text here
</must_wrap_anything_inside_this_element>
</root>
'''

tree = lxml.etree.fromstring(tree_string)

如何将 must_wrap_anything_inside_this_element 元素内的任何内容(是的任何内容 - 文本或其他元素)与另一个元素(如下面的 wrapper)包裹起来,从而导致:

result = '''
<root>
<must_wrap_anything_inside_this_element>
    <wrapper>
    asjkdnasd cass'a s' alsdnjl al <g/> 
    'asdasjkdhaisbd'assdaewken jka <x id='3'/> kfa;sdf lasd;f naisb fiuabewf <some_random_tag> random stuff </some_random_tag>
    yet more text here
    </wrapper>
</must_wrap_anything_inside_this_element>
</root>
'''

我正在使用 Python 的 lxml 库。谢谢。

好吧,这需要一些体操,但是是可行的....

#locate your target element
target = tree.xpath('//must_wrap_anything_inside_this_element')[0]
#change its tag name....
target.tag="wrapper"
#now create a new element with old, top tag name
tree.insert(0,etree.fromstring('<must_wrap_anything_inside_this_element/>'))
#use the new element as the destination for the old element
destination=tree.xpath('//must_wrap_anything_inside_this_element')[0]
#finally, move the old element to its final resting place...
destination.insert(0,target)
print(etree.tostring(tree).decode())

输出是你想要的输出。