【python】处理xml文件——dom
参考
【尝试】
【参考第【3】个博客】
【原版代码】
#coding=utf-8 #通过minidom解析xml文件 import xml.dom.minidom as xmldom import os ''' XML文件读取 <?xml version="1.0" encoding="utf-8"?> <catalog> <maxid>4</maxid> <login username="pytest" passwd='123456'>dasdas <caption>Python</caption> <item id="4"> <caption>测试</caption> </item> </login> <item id="2"> <caption>Zope</caption> </item> </catalog> ''' xmlfilepath = os.path.abspath("test.xml") print ("xml文件路径:", xmlfilepath) # 得到文档对象 domobj = xmldom.parse(xmlfilepath) print("xmldom.parse:", type(domobj)) # 得到元素对象 elementobj = domobj.documentElement print ("domobj.documentElement:", type(elementobj)) #获得子标签 subElementObj = elementobj.getElementsByTagName("login") print ("getElementsByTagName:", type(subElementObj)) print (len(subElementObj)) # 获得标签属性值 print (subElementObj[0].getAttribute("username")) print (subElementObj[0].getAttribute("passwd")) #区分相同标签名的标签 subElementObj1 = elementobj.getElementsByTagName("caption") for i in range(len(subElementObj1)): print ("subElementObj1[i]:", type(subElementObj1[i])) print (subElementObj1[i].firstChild.data) #显示标签对之间的数据
报错了,貌似是因为我的python版本低的缘故?两个问题:
(1)一个是print那里的括号问题。
(2)一个是type()函数取得对象类型名时,都只显示<type 'instance'>而不是更为具体详细的类型名。
所以,改动一下。
【改动后】
#coding=utf-8 #通过minidom解析xml文件 import xml.dom.minidom as xmldom import os ''' XML文件读取 <?xml version="1.0" encoding="utf-8"?> <catalog> <maxid>4</maxid> <login username="pytest" passwd='123456'>dasdas <caption>Python</caption> <item id="4"> <caption>测试</caption> </item> </login> <item id="2"> <caption>Zope</caption> </item> </catalog> ''' xmlfilepath = os.path.abspath("test_g2.xml") print "xml文件路径:", xmlfilepath # 得到文档对象 domobj = xmldom.parse(xmlfilepath) print "xmldom.parse:", type(domobj) print "xmldom.parse:", domobj.__class__ # 得到元素对象 elementobj = domobj.documentElement print "domobj.documentElement:", type(elementobj) print "domobj.documentElement:", elementobj.__class__ #获得子标签 subElementObj = elementobj.getElementsByTagName("login") print "getElementsByTagName:", type(subElementObj) print len(subElementObj) # 获得标签属性值 print subElementObj[0].getAttribute("username") print subElementObj[0].getAttribute("passwd") #区分相同标签名的标签 subElementObj1 = elementobj.getElementsByTagName("caption") for i in range(len(subElementObj1)): print "subElementObj1[i]:", type(subElementObj1[i]) print subElementObj1[i].firstChild.data #显示标签对之间的数据
待补充