python lxml 添加一个保留所有父树的子元素
python lxml Add a subelement keeping all the parent tree
我有这样的东西:
<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>
我想添加一个标签来保持这个结果:
<source><en>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></en></source>
但是,append、insert 或 subElement 都不会保留父元素的结构。
from lxml import etree
xml = et.fromstring('<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>')
root = xml.getroot()
element = et.Element('en')
root.insert(0, element)
print(et.tostring(root))
但是它插入了一个空标签。我不是在猜测如何像这样保持父级的整个结构:
<source><en />Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>
您可以重命名原始根元素,然后将其附加到新的根元素。
from lxml import etree
old_root = etree.fromstring('<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>')
old_root.tag = "en"
new_root = etree.Element("source")
new_root.append(old_root)
print(etree.tostring(new_root))
结果:
<source><en>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></en></source>
这是我的解决方案。希望这会有所帮助。
干杯!
我有这样的东西:
<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>
我想添加一个标签来保持这个结果:
<source><en>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></en></source>
但是,append、insert 或 subElement 都不会保留父元素的结构。
from lxml import etree
xml = et.fromstring('<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>')
root = xml.getroot()
element = et.Element('en')
root.insert(0, element)
print(et.tostring(root))
但是它插入了一个空标签。我不是在猜测如何像这样保持父级的整个结构:
<source><en />Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>
您可以重命名原始根元素,然后将其附加到新的根元素。
from lxml import etree
old_root = etree.fromstring('<source>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></source>')
old_root.tag = "en"
new_root = etree.Element("source")
new_root.append(old_root)
print(etree.tostring(new_root))
结果:
<source><en>Some text <g>that is like this.<g> Needs </g></g>. <g> I want to keep this structure</g></en></source>
这是我的解决方案。希望这会有所帮助。
干杯!