Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用lxml在根元素之前/之后预加或附加PI_Python_Lxml_Processing Instruction - Fatal编程技术网

Python 使用lxml在根元素之前/之后预加或附加PI

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,我如何在根元素之前预先发送处理指令,或者在使用lxml删除根元素之后追加PIs

目前,以下示例不起作用:

从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
。你可以修改你的答案,让我接受。