节点文本相关操作
对于许多xml文件,一个根节点向下会有很多层级的子节点,通常会把文本放置到最最底层的节点
因此要想访问文本,就必须要访问最底层的那个节点
但也有一些xml文件,text会放置到中间层级的节点中,比如html
创建带文本节点
root = etree.Element("root") root.text = "TEXT" print(root.text) #输出:TEXT etree.tostring(root) #b'<root>TEXT</root>'
节点文本相关操作
html = etree.Element("html") body = etree.SubElement(html, "body") body.text = "TEXT" etree.tostring(html) # b'<html><body>TEXT</body></html>' br = etree.SubElement(body, "br") etree.tostring(html) #b'<html><body>TEXT<br/></body></html>' br.tail = "TAIL" etree.tostring(html) #b'<html><body>TEXT<br/>TAIL</body></html>' etree.tostring(br) #b'<br/>TAIL' etree.tostring(br, with_tail=False) #b'<br/>' etree.tostring(html, method="text") #b'TEXTTAIL' #-----------------------使用xpath提取文本----------------------------- print(html.xpath("string()")) #输出:TEXTTAIL print(html.xpath("//text()")) #输出:['TEXT', 'TAIL'] build_text_list = etree.XPath("//text()") print(build_text_list(html)) #输出:['TEXT', 'TAIL'],事先写好Xpath,并将xpath套用到html节点上 texts = build_text_list(html) print(texts[0]) #输出:TEXT parent = texts[0].getparent() print(parent.tag) #输出:body print(texts[1]) #输出:TAIL print(texts[1].getparent().tag) #输出:br stringify = etree.XPath("string()") print(stringify(html)) #输出:TEXTTAIL print(stringify(html).getparent()) #输出:NONE,由于通过string()获取是各个节点拼接的文本,因此无法获得其父节点 #----------------------判断是否为普通文本,或者是tail文本----------------------------- print(texts[0].is_text) #输出:True print(texts[1].is_text) #输出:False print(texts[1].is_tail) #输出:True
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------