点击此处浏览总目录

节点文本相关操作

对于许多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

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

posted @ 2019-10-28 16:35  立业的博客  阅读(338)  评论(0编辑  收藏  举报