Python 如何使用lxml在特定位置插入文本节点?

Python 如何使用lxml在特定位置插入文本节点?,python,html,lxml,Python,Html,Lxml,如果tostring(root)类似于: 人们希望在child1之前插入纯文本(甚至可能已经转义);在两个孩子之间;在child2使用lxml之后,我们应该如何做到这一点呢?我在问,因为它看起来像是,lxml中没有单独的文本节点,人们只能访问元素的文本属性,我在API文档中也找不到任何解决方案 无论如何,预期的最终结果如下所示: text1text2text3 要在节点的任何子节点之前插入文本,请使用节点的text属性 from lxml import etree s = "<root

如果
tostring(root)
类似于:


人们希望在
child1
之前插入纯文本(甚至可能已经转义);在两个孩子之间;在
child2
使用
lxml
之后,我们应该如何做到这一点呢?我在问,因为它看起来像是,
lxml
中没有单独的文本节点,人们只能访问
元素的
文本
属性,我在API文档中也找不到任何解决方案

无论如何,预期的最终结果如下所示:

text1text2text3

要在节点的任何子节点之前插入文本,请使用节点的
text
属性

from lxml import etree
s = "<root><child1></child1><child2></child2></root>"
root = etree.XML(s)
root.text = "text1"
child1, child2 = root.getchildren()
child1.tail = "text2"
child2.tail = "text3"
print(etree.tostring(root, method="c14n")) #use this method to prevent self-closing tags in output
要在节点的子节点后插入文本,请使用该子节点的
tail
属性

from lxml import etree
s = "<root><child1></child1><child2></child2></root>"
root = etree.XML(s)
root.text = "text1"
child1, child2 = root.getchildren()
child1.tail = "text2"
child2.tail = "text3"
print(etree.tostring(root, method="c14n")) #use this method to prevent self-closing tags in output
从lxml导入etree
s=“”
root=etree.XML
root.text=“text1”
child1,child2=root.getchildren()
child1.tail=“text2”
child2.tail=“text3”
打印(etree.tostring(root,method=“c14n”)#使用此方法防止输出中的自动关闭标记
结果:

b'<root>text1<child1></child1>text2<child2></child2>text3</root>'
b'text1text2text3'

文本属性似乎可以完成这项工作。设置它似乎很简单

test="<root><child1></child1><child2></child2></root>"
from lxml import etree
root = etree.fromstring(test)
etree.tostring(root)
b'<root><child1/><child2/></root>'
print(root.text)
None
root.text = '1'
print(root.text)
1
etree.tostring(root)
b'<root>1<child1/><child2/></root>'
for child in root:
    child.text = 'test'
etree.tostring(root)
b'<root>1<child1>test</child1><child2>test</child2></root>'

那么,
xml.etree.ElementTree
解决方案如何?那么,为什么
-1
?@RomanPerekhrest需要详细说明一下呢?我不会,因为我已经接受了answer@RomanPerekhrest如果值得的话,你仍然可以赢得一张向上投票的票,更不用说它是否与目前被接受的不同,也许其他人会发现你的解决方案更有用。但是他希望第二个和第三个字符串在child1和child2标记之外。然后他需要使用文本和尾部的组合。我认为下面的答案是正确的