电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python如何使用ElementTree解析xml

瀏覽:3日期:2022-07-08 15:17:05

以country.xml為例,內(nèi)容如下:

<?xml version='1.0'?><data> <country name='Liechtenstein'> <rank updated='yes'>2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name='Austria' direction='E'/> <neighbor name='Switzerland' direction='W'/> </country> <country name='Singapore'> <rank updated='yes'>5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name='Malaysia' direction='N'/> </country> <country name='Panama'> <rank updated='yes'>69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name='Costa Rica' direction='W'/> <neighbor name='Colombia' direction='E'/> </country></data>

1.解析

1)調(diào)用parse()方法,返回解析樹

try: import xml.etree.cElementTree as ETexcept ImportError: import xml.etree.ElementTree as ETtree = ET.parse('country.xml') # <class ’xml.etree.ElementTree.ElementTree’>root = tree.getroot() # 獲取根節(jié)點 <Element ’data’ at 0x02BF6A80>

2)調(diào)用from_string(),返回解析樹的根元素

import xml.etree.ElementTree as ETdata = open('country.xml').read()root = ET.fromstring(data) # <Element ’data’ at 0x036168A0>

3)調(diào)用ElementTree類ElementTree(self, element=None, file=None) # 這里的element作為根節(jié)點

import xml.etree.ElementTree as ETtree = ET.ElementTree(file='country.xml') # <xml.etree.ElementTree.ElementTree object at 0x03031390>root = tree.getroot() # <Element ’data’ at 0x030EA600>

1)簡單遍歷

import xml.etree.ElementTree as ETtree = ET.parse('country.xml')root = tree.getroot()print(root.tag, ':', root.attrib) # 打印根元素的tag和屬性# 遍歷xml文檔的第二層for child in root: # 第二層節(jié)點的標(biāo)簽名稱和屬性 print(child.tag,':', child.attrib) # 遍歷xml文檔的第三層 for children in child: # 第三層節(jié)點的標(biāo)簽名稱和屬性 print(children.tag, ':', children.attrib)

可以通過下標(biāo)的方式直接訪問節(jié)點

# 訪問根節(jié)點下第一個country的第二個節(jié)點year,獲取對應(yīng)的文本year = root[0][1].text # 2008

2)ElementTree提供的方法

find(match) # 查找第一個匹配的子元素, match可以時tag或是xpaht路徑findall(match) # 返回所有匹配的子元素列表findtext(match, default=None) # iter(tag=None) # 以當(dāng)前元素為根節(jié)點 創(chuàng)建樹迭代器,如果tag不為None,則以tag進(jìn)行過濾iterfind(match) #

例子:

# 過濾出所有neighbor標(biāo)簽for neighbor in root.iter('neighbor'):print(neighbor.tag, ':', neighbor.attrib)

# 遍歷所有的counry標(biāo)簽for country in root.findall('country'):# 查找country標(biāo)簽下的第一個rank標(biāo)簽rank = country.find('rank').text# 獲取country標(biāo)簽的name屬性name = country.get('name')print(name, rank)

1) 屬性相關(guān)

# 將所有的rank值加1,并添加屬性updated為yesfor rank in root.iter('rank'): new_rank = int(rank.text) + 1 rank.text = str(new_rank) # 必須將int轉(zhuǎn)為str rank.set('updated', 'yes') # 添加屬性# 再終端顯示整個xmlET.dump(root)# 注意 修改的內(nèi)容存在內(nèi)存中 尚未保存到文件中# 保存修改后的內(nèi)容tree.write('output.xml')

import xml.etree.ElementTree as ETtree = ET.parse('output.xml')root = tree.getroot()for rank in root.iter('rank'): # attrib為屬性字典 # 刪除對應(yīng)的屬性updated del rank.attrib[’updated’] ET.dump(root)

小結(jié): 關(guān)于classxml.etree.ElementTree.Element 屬性相關(guān)

attrib 為包含元素屬性的字典 keys() 返回元素屬性名稱列表 items() 返回(name,value)列表 get(key, default=None) 獲取屬性 set(key, value) # 跟新/添加 屬性 del xxx.attrib[key] # 刪除對應(yīng)的屬性

2) 節(jié)點/元素 相關(guān)

刪除子元素remove()

import xml.etree.ElementTree as ETtree = ET.parse('country.xml')root = tree.getroot()# 刪除rank大于50的國家for country in root.iter('country'): rank = int(country.find('rank').text) if rank > 50: # remove()方法 刪除子元素 root.remove(country)ET.dump(root)

添加子元素

代碼:

import xml.etree.ElementTree as ETtree = ET.parse('country.xml')root = tree.getroot()country = root[0]last_ele = country[len(list(country))-1]last_ele.tail = ’ntt’# 創(chuàng)建新的元素, tag為test_appendelem1 = ET.Element('test_append')elem1.text = 'elem 1'# elem.tail = ’nt’country.append(elem1)# SubElement() 其實內(nèi)部調(diào)用的時append()elem2 = ET.SubElement(country, 'test_subelement')elem2.text = 'elem 2'# extend()elem3 = ET.Element('test_extend')elem3.text = 'elem 3'elem4 = ET.Element('test_extend')elem4.text = 'elem 4'country.extend([elem3, elem4])# insert()elem5 = ET.Element('test_insert')elem5.text = 'elem 5'country.insert(5, elem5)ET.dump(country)

效果:

Python如何使用ElementTree解析xml

添加子元素方法總結(jié):

append(subelement) extend(subelements) insert(index, element)

4.創(chuàng)建xml文檔

想創(chuàng)建root Element,然后創(chuàng)建SubElement,最后將root element傳入ElementTree(element),創(chuàng)建tree,調(diào)用tree.write()方法寫入文件

對于創(chuàng)建元素的3個方法: 使用ET.Element、Element對象的makeelement()方法以及ET.SubElement

import xml.etree.ElementTree as ETdef subElement(root, tag, text): ele = ET.SubElement(root, tag) ele.text = text ele.tail = ’n’root = ET.Element('note')to = root.makeelement('to', {})to.text = 'peter'to.tail = ’n’root.append(to)subElement(root, 'from', 'marry')subElement(root, 'heading', 'Reminder')subElement(root, 'body', 'Don’t forget the meeting!')tree = ET.ElementTree(root)tree.write('note.xml', encoding='utf-8', xml_declaration=True)

效果:

Python如何使用ElementTree解析xml

由于原生保存的XML時默認(rèn)無縮進(jìn),如果想要設(shè)置縮進(jìn)的話, 需要修改保存方式

代碼:

import xml.etree.ElementTree as ETfrom xml.dom import minidomdef subElement(root, tag, text): ele = ET.SubElement(root, tag) ele.text = textdef saveXML(root, filename, indent='t', newl='n', encoding='utf-8'): rawText = ET.tostring(root) dom = minidom.parseString(rawText) with open(filename, ’w’) as f: dom.writexml(f, '', indent, newl, encoding)root = ET.Element('note')to = root.makeelement('to', {})to.text = 'peter'root.append(to)subElement(root, 'from', 'marry')subElement(root, 'heading', 'Reminder')subElement(root, 'body', 'Don’t forget the meeting!')# 保存xml文件saveXML(root, 'note.xml')

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 滚筒线,链板线,总装线,流水线-上海体能机电有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 新疆散热器,新疆暖气片,新疆电锅炉,光耀暖通公司 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 |