在特定(最初为空)路径插入元素
Inserting an element at a specific (initally empyt) path
我想在 xml 文件的特定路径中添加一个元素,其子节点在初始 example.xml 文件中不存在。添加元素时,我想“即时”创建所有必要的子节点,而不是一次创建一个。
我不知道正确的做法,下面的代码片段只是为了说明目的的一个例子。也许可以使用 etree 的不同方法。
我的例子:
from lxml import etree
tree = etree.parse('example.xml')
root = tree.getroot()
path = etree.Element('/leadSinger/names/firstName')
etree.Element(path, "Freddie")
tree.write('example.xml')
初始example.xml文件:
<interpret>
<name>Queen</name>
<interpret>
元素创建、插入、写入后的example.xml文件:
<interpret>
<name>Queen</name>
<leadSinger>
<names>
<firstName>Freddie</firstName>
</names>
</leadSinger>
</interpret>
你可以这样试试:
lead = """<leadSinger>
<names>
<firstName>Freddie</firstName>
</names>
</leadSinger>
"""
elem = etree.fromstring(lead)
destination = root.xpath('//interpret/name')[0]
destination.addnext(elem)
print(etree.tostring(root, encoding="unicode", pretty_print=True))
这应该能得到预期的输出。
我想在 xml 文件的特定路径中添加一个元素,其子节点在初始 example.xml 文件中不存在。添加元素时,我想“即时”创建所有必要的子节点,而不是一次创建一个。
我不知道正确的做法,下面的代码片段只是为了说明目的的一个例子。也许可以使用 etree 的不同方法。
我的例子:
from lxml import etree
tree = etree.parse('example.xml')
root = tree.getroot()
path = etree.Element('/leadSinger/names/firstName')
etree.Element(path, "Freddie")
tree.write('example.xml')
初始example.xml文件:
<interpret>
<name>Queen</name>
<interpret>
元素创建、插入、写入后的example.xml文件:
<interpret>
<name>Queen</name>
<leadSinger>
<names>
<firstName>Freddie</firstName>
</names>
</leadSinger>
</interpret>
你可以这样试试:
lead = """<leadSinger>
<names>
<firstName>Freddie</firstName>
</names>
</leadSinger>
"""
elem = etree.fromstring(lead)
destination = root.xpath('//interpret/name')[0]
destination.addnext(elem)
print(etree.tostring(root, encoding="unicode", pretty_print=True))
这应该能得到预期的输出。