使用lxml的API,可以通过查询根元素的同级(及其同级)来访问根之前的初步元素,例如处理指令和注释:
>>> buffer = StringIO('<?xml version="1.0" ?><?PI foo?><root/>')
>>> doc = etree.parse(buffer)
>>> root = doc.getroot()
>>> pi = root.getprevious()
>>> str(pi)
'<?PI foo?>'
但是要从文档中删除元素,必须包含一个父元素:
parent.remove(child)
显然,该处理指令元素没有父级。我可以对根进行深层复制,以获得没有先前同级的另一棵树,但这显然不是一个可取的解决方案。有谁知道不需要这种解释的解决方案,而在代码中不需要解释性注释? (将解释转移到函数名称将不算作答案。)