python - 使用 lxml 在根元素之前/之后添加或追加 PI

标签 python lxml processing-instruction

使用 lxml,如何在根元素之前添加处理指令或使用 lxml 在根元素之后附加 PI。

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

from lxml import etree

root = etree.XML("<ROOT/>")
root.addprevious(etree.ProcessingInstruction("foo"))
print(etree.tounicode(root))

我得到:

<ROOT/>

代替:

<?foo?><ROOT/>

最佳答案

实际上,一个 Element始终附加到 ElementTree即使它看起来“分离”:

root = etree.XML("<ROOT/>")
assert root.getroottree() is not None

当我们使用 addprevious/addnext 在根元素之前/之后插入处理指令时,PI 不附加到父元素(没有任何) 但它们附加到根树。

所以,问题出在tounicode的用法上(或 tostring)。最佳做法是打印根树的 XML,而不是根元素。

from lxml import etree

root = etree.XML("<ROOT/>")
root.addprevious(etree.ProcessingInstruction("foo"))
root.addnext(etree.ProcessingInstruction("bar"))

print(etree.tounicode(root))
# => "<ROOT/>"

print(etree.tounicode(root.getroottree()))
# => "<?foo ?><ROOT/><?bar ?>"

关于python - 使用 lxml 在根元素之前/之后添加或追加 PI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60217386/

相关文章:

c# - 解析 XSLT 中的处理指令

python - NDCG(归一化贴现 yield )有缺陷吗?我已经计算了一些替代的排名质量衡量标准,但我无法确定它的正面或反面

Python从xml文件中读取base 64字符串到类似QT的字节数组

python - 如何从 <br/> 标签后的单元格中获取文本?

python - pip 无法正确安装软件包 : Permission denied error

xquery - 在 MarkLogic 中搜索 XML 文档以获取处理指令

python - 像python中的c一样的指针类型转换

python - Django-admin.py 不工作(-bash :django-admin. py:找不到命令)

具有多个 namespace 的python lxml findall