python操作xml
xpath_test.html
<html>
<body>
<head>xml Test</head>
<div id="content">
<ul id="ul">
<li>NO.1</li>
<li>NO.2</li>
<li>NO.3</li>
</ul>
<ul id="ul2">
<li>one</li>
<li>two</li>
</ul>
<div>
<p>第二个标签</p>
</div>
</div>
<div id="url">
<a href="http:www.58.com" title="58">58</a>
<a href="http:www.csdn.net" title="CSDN">CSDN</a>
<a href="http:www.csdn.net222" title="CSDN">sssss</a>
</div>
</body>
</html>
代码:
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
# ----------ElementTree---------
# 从文件解析,返回elementTree类型
tree = ET.parse('xpath_test.html')
# 获取根结点 element
root = tree.getroot()
for x in root: # 遍历根节点的子节点
print(x,x.tag,x.text)
# find只查找一个;获取第一个ul标签。.//ul是xpath写法
ele = tree.find('.//ul')
e = ele.find('.//li') # 获取ul的第一个li标签
# 从ele中删掉e这个子结点
ele.remove(e)
# for e in ele:
# if e.text == "NO.1":
# ele.remove(e)
# 查找所有的div标签,返回值:list类型
tree.findall('.//div')
# 迭代,获取tree所有结点(无视层级)
it = tree.iter()
for i in it: # 迭代所有结点
print(i)
divs = tree.iterfind('.//div') # 迭代查找所有div标签,返回值是迭代类型,需要遍历
for div in divs:
print(div,div.text,div.tag)
# ------------------Element-----------------
# xml = ET.XML(string) # 解析字符串 -> element
d = tree.find('.//div')
# 创建element. 用法:Element(标签名,属性键值对)
new_ele = Element('fff',{'id':'123'})
# .tail,设置此标签和下个标签之间的间隔,此处是换行符
new_ele.tail='\n'
# 设置标签的内容文本:原先没有文本的话,就会创建,原来有的话,会更新
new_ele.text = 'new_ele'
# 设置标签的属性
new_ele.attrib = {'id':'222','class':'333'}
# 设置标签名
new_ele.tag = 'Test'
# 给当前结点添加子节点,放到最后面
d.append(new_ele)
# 批量添加子结点
d.extend([new_ele,])
# 插入一个子节点,插入到索引1的位置,也就是第二个
d.insert(1,new_ele)
# 这几个注释掉的方法和 ElementTree里面的一样
# new_ele.find('.//')
# new_ele.findall('.//')
# new_ele.iterfind('.//div')
# new_ele.iter()
# 通过 get(),可以获取结点属性的值
id = new_ele.get('id')
# 设置结点属性(属性,属性值)
title = new_ele.set('class','new_class')
# 显示节点的属性:key() 获取所有的属性:[key1,key2...]; items() 获取属性的键值对: [(key,value),(key,value)...]
new_ele.keys()
new_ele.items()
# 迭代自身和所有子结点的内容文本
all_text = new_ele.itertext()
for a in all_text:
print(a) # a是文本哦
# 写入文件 method 可以为 xml,html,text...
tree.write('xx.html',encoding='utf8',method='html')