在特定(最初为空)路径插入元素

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

这应该能得到预期的输出。