Python 使用lxml在根元素之前/之后预加或附加PI
使用lxml,我如何在根元素之前预先发送处理指令,或者在使用lxml删除根元素之后追加PIs 目前,以下示例不起作用:Python 使用lxml在根元素之前/之后预加或附加PI,python,lxml,processing-instruction,Python,Lxml,Processing Instruction,使用lxml,我如何在根元素之前预先发送处理指令,或者在使用lxml删除根元素之后追加PIs 目前,以下示例不起作用: 从lxml导入etree root=etree.XML(“”) root.addprevious(etree.ProcessingInstruction(“foo”)) 打印(etree.tounicode(根)) 我得到: 而不是: 您需要使用ElementTree,而不仅仅是tounicode()中的元素: 从lxml导入etree root=etree.XML(“”
从lxml导入etree
root=etree.XML(“”)
root.addprevious(etree.ProcessingInstruction(“foo”))
打印(etree.tounicode(根))
我得到:
而不是:
您需要使用
ElementTree
,而不仅仅是tounicode()中的元素
:
从lxml导入etree
root=etree.XML(“”)
root.addprevious(etree.ProcessingInstruction(“foo”))
打印(etree.tounicode(root.getroottree())
输出几乎就是您想要的:
<?foo ?><ROOT/>
出现foo
后的额外空格字符是因为lxml
将PI
呈现为PI.target+“”+PI.text实际上,即使看起来是“分离的”,an也总是附加到a上:
root=etree.XML(“”)
断言根目录。getroottree()不是None
当我们使用addprevious
/addnext
在根元素之前/之后插入处理指令时,PI不会附加到父元素(没有),而是附加到根树
因此,问题在于(或tostring
)的使用。最佳实践是打印根树的XML,而不是根元素
从lxml导入etree
root=etree.XML(“”)
root.addprevious(etree.ProcessingInstruction(“foo”))
root.addnext(etree.ProcessingInstruction(“bar”))
打印(etree.tounicode(根))
# => ""
打印(etree.tounicode(root.getroottree())
# => ""
我看到人们对这个答案投了赞成票,但正确的答案是使用etree.tounicode(root.getroottree())
:不需要创建新的ElementTree
。你可以修改你的答案,让我接受。