文件对象模型(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.minidomdom=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
'''catalog1None'''
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
'''3loginloginlogin'''
---------------------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
'''pytest1pytest2pytest3'''