使用xml.dom解析xml
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
xml文件的特征
由标签对组成,<aa></aa>
标签可以有属性:<aa id='123'></aa>
标签对可以嵌入数据:<aa>abc</aa>
标签可以嵌入子标签(具有层级关系):
<aa>
<bb></bb>
</aa>
Python中用xml.dom.mindom来解析xml文件,实例如下。
1.使用解析器打开xml文档
import xml.dom.minidom
dom=xml.dom.minidom.parse(filename)#打开文件
2.获得标签的属性
root=dom.documentElement#得到文档元素对象
每一个结点都有它的nodeName,nodeValue,nodeType属性
print root.nodeName 为节点的名字
print root.nodeValue 为节点的值
print root.nodeType 为节点的类型
print root.ELEMENT_NODE
'''
catalog
1
None
'''
3.获得子标签
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<login username="pytest1" passwd='123456'>
<caption>Python</caption>
<item id="1">
<caption>测试</caption>
</item>
</login>
<login username="pytest2" passwd='123456'>
<caption>java</caption>
<item id="2">
<caption>测试</caption>
</item>
</login>
<login username="pytest3" passwd='123456'>
<caption>C++</caption>
<item id="3">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
1.对于知道元素名字的子元素,可以使用getElementsByTagName方法获取:
bb = root.getElementsByTagName('login')
print len(bb)
for b in bb:
print b.nodeName
'''
3
login
login
login
'''
---------------------
cc=root.getElementsByTagName('caption')
print len(cc)
'''
7个caption标签
'''
2.那么如何获取每个caption标签对之间的数据呢
cc=root.getElementsByTagName('caption')
for c in cc:#也可以通过cc的索引来实现,cc[0],cc[1]等
print c.firstChild.data
'''
Python
测试
Python
测试
Python
测试
Zope
'''
3.<login>和<item>标签是有属性的,如何获得他们的属性?
itemlist = root.getElementsByTagName('login')
for item in itemlist:
shuxingzhi=item.getAttribute("username")
print shuxingzhi
'''
pytest1
pytest2
pytest3
'''