<p>首先,感谢@egur和@Henrik的指导,特别是指向另一个图书馆。我正在使用lxml(<a href="https://lxml.de/tutorial.html#parsing-from-strings-and-files" rel="nofollow noreferrer">and this documentation</a>),因此我可以使用以下代码执行我想要的操作:</p>
<pre><code>from lxml import etree
tree = etree.parse('base.xml')
new = etree.tostring(etree.parse('new.xml')) # parsing to a string so it can be appended later
for elem in tree.xpath(".//elem3"): # finds the parent where the element to be replaced are
elem.getparent().append(etree.fromstring(new)) #append in the end of parent, the fromstring() is because append don't like elementTree
elem.getparent().remove(elem)
print(etree.tostring(tree, encoding="utf-8").decode('utf-8'))
</code></pre>
<p>上述代码产生以下结果:</p>
<pre><code><root>
<folder>
<elem1>'something here'</elem1>
<elem2>'more stuff here'</elem2>
<elem4>'even more stuff here with subelements too'</elem4>
<NewElem>
<Difsub1>'something else here, but different'</Difsub1>
<Difsub2>'all sorts of different blablabla'</Difsub2>
</NewElem></folder>
</root>
</code></pre>
<p>注意<code>NewElem</code>在<code>elem4</code>之后,不是在<code>elem3</code>的确切位置,而是在<code>folder</code>之内,所以我认为这解决了我想要的问题</p>