成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Python使用ElementTree美化XML格式的操作

瀏覽:114日期:2022-08-03 14:48:01

Python中使用ElementTree可以很方便的處理XML,但是產生的XML文件內容會合并在一行,難以看清楚。

如下格式:

<root><aa>aatext<cc>cctext</cc></aa><bb>bbtext<dd>ddtext<ee>eetext</ee></dd></bb></root>

使用minidom模塊中的toprettyxml和writexml方法都有參數可以優化XML,但是有兩個問題:

a. 如果解析的XML已經是美化過的,那么執行該方法會多出很多空行

b. 產生的結果會將text也獨立一行,如下:

<root> <aa> aatext </aa> <bb> bbtext </bb> </root>

而我想產生如下結果:

<root> <aa>aatext</aa> <bb>bbtext</bb> </root>

于是只能自己寫一個美化XML的方法。

我們首先研究一下ElementTree模塊中的Element類,使用getroot方法返回的便是Element類。

該類中有四個屬性tag、attrib、text與tail, 對應在XML中如下圖所示:

Python使用ElementTree美化XML格式的操作

整個XML就是一個Element,里面嵌套了很多子Element。

Element可以使用for循環迭代。

通過在text和tail中增加換行和制表符,就可以實現美化XML的目的。

美化代碼如下:

def prettyXml(element, indent, newline, level = 0): # elemnt為傳進來的Elment類,參數indent用于縮進,newline用于換行 if element: # 判斷element是否有子元素 if element.text == None or element.text.isspace(): # 如果element的text沒有內容 element.text = newline + indent * (level + 1) else: element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * (level + 1) #else: # 此處兩行如果把注釋去掉,Element的text也會另起一行 #element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * level temp = list(element) # 將elemnt轉成list for subelement in temp: if temp.index(subelement) < (len(temp) - 1): # 如果不是list的最后一個元素,說明下一個行是同級別元素的起始,縮進應一致 subelement.tail = newline + indent * (level + 1) else: # 如果是list的最后一個元素, 說明下一行是母元素的結束,縮進應該少一個 subelement.tail = newline + indent * level prettyXml(subelement, indent, newline, level = level + 1) # 對子元素進行遞歸操作 from xml.etree import ElementTree #導入ElementTree模塊 tree = ElementTree.parse(’test.xml’) #解析test.xml這個文件,該文件內容如上文 root = tree.getroot() #得到根元素,Element類 prettyXml(root, ’t’, ’n’) #執行美化方法 ElementTree.dump(root) #顯示出美化后的XML內容

輸出結果如下:

<root> <aa> aatext <cc>cctext</cc> </aa> <bb> bbtext <dd> ddtext <ee>eetext</ee> </dd> </bb> </root>

殘留問題點:

windows下的換行符是'rn',只需將prettyXml方法的第三個參數改為'rn',使用記事本打開生成的XML大部分OK。

但是XML說明與根元素開始符之間不知如何插入'rn'.

Python使用ElementTree美化XML格式的操作

補充知識:python-xml 模塊-代碼生成xml 文檔

一、XML 模塊

什么是xml:可擴展的標記語言,標記翻譯為標簽,用標簽來組織數據的語言,也是一種語言可以用來自定義文檔結構。相比json 使用場景更加廣泛,但是語法格式相比json 復雜很多

什么時候使用json:前后臺交互數據時使用json

什么時候使用xml:當需要自定義文檔結構時使用xml,比如java中經常用xml來作為配置文件,常見操作就是通過程序去讀取配置信息,而修改增加刪除,一般是交給用戶來手動完成

標簽的叫發:node(節點)、elment(元素)、tag(標簽)

需求從conuntrys中獲取所有的國家名稱

==========================>countrys<data> <country name='Liechtenstein'> <rank updated='yes'>2</rank> <year>2009</year> <gdppc>141100</gdppc> <neighbor direction='E' name='Austria' /> <neighbor direction='W' name='Switzerland' /> </country> <country name='Singapore'> <rank updated='yes'>5</rank> <year>2012</year> <gdppc>59900</gdppc> <neighbor direction='N' name='Malaysia' /> </country> <country name='Panama'> <rank updated='yes'>69</rank> <year>2012</year> <gdppc>13600</gdppc> <neighbor direction='W' name='Costa Rica' /> <neighbor direction='E' name='Colombia' /> </country></data># 取別名可以用于簡化書寫import xml.etree.ElementTree as ETtree = ET.parse(’countrys’)#獲取根標簽#第一種獲取標簽的方式#全文查找iter() # 獲取迭代器 如果不指定參數 則迭代器迭代的是所有標簽print(root.iter())# 獲取迭代器 如果指定參數 則迭代器迭代的是所有名稱匹配的標簽for e in root.iter('rank'): print(e) #第二種獲取標簽的方式#在當前標簽下(所有子級標簽)尋找第一個名稱匹配的標簽print(root.find('rank')) #第一個名稱不匹配所以返回None#第三種獲取標簽的方式#在當前標簽下(所有子級標簽)尋找所有名稱匹配的標簽print(root.findall('rank')) #[]

練習:找到新加坡中year 這個標簽

#print(e.tag) #標簽名稱#print(e.attrib) #屬性 字典類型#print(e.text) #文本內容import xml.etree.ElementTree as ETtree = ET.parse('countrys')# 獲取根標簽root = tree.getroot()for e in root.iter('country'): if e.attrib['name'] == 'Singapore': y = e.find('year') print(y.text) #2012

在程序中修改文檔內容:把所有year標簽的文本加1

import xml.etree.ElementTree as ETtree = ET.parse('countrys')root = tree.getroot()for e in root.iter('year'): e.text = str(int(e.text) + 1) #做完修改后要將修改后的內容寫入文件tree.write(’countrys’)

把新加坡國家刪除:

import xml.etree.ElementTree as ETtree = ET.parse('countrys')root = tree.getroot()for e in root.findall('country'): print(e) if e.attrib['name'] == 'Singapore': #刪除時要通過被刪除的父級標簽來刪除 root.remove(e)tree.write(’countrys’)

用程序將中國信息寫入文檔中:

import xml.etree.ElementTree as ETtree = ET.parse('countrys')root = tree.getroot()#添加時也需要將要添加的數據做成一個Elementc = ET.Element('country',{'name':'china'})# 在國家下有一堆子標簽ranke = ET.Element('ranke',{'updated':'yes'})c.append(ranke)year = ET.Element('year')year.text = '2018'c.append(year)#添加到root標簽中root.append(c)tree.write('countrys')

總結:一般不會通過程序 去修改 刪除 和添加

什么時候應該使用XML格式:

當你需要自定文檔結構時(XML最強大的地方就是結構)

前后臺交互不應該使用,前后臺交互應該使用JSON格式

代碼生成XML文檔

import xml.etree.ElementTree as ET# 創建根標簽root = ET.Element('root')root.text = '這是一個XML文檔!'c = ET.Element('country',{'name':'china'})root.append(c)tree = ET.ElementTree(root)# 參數: 文件名稱 編碼方式 是否需要文檔聲明tree.write('new.xml',encoding='utf-8',xml_declaration=True)=========================>new.xml 內容為<?xml version=’1.0’ encoding=’utf-8’?><root>這是一個XML文檔!<country name='china' /></root>

以上這篇Python使用ElementTree美化XML格式的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产亚洲毛片在线| 久久久美女艺术照精彩视频福利播放| 8x8x8国产精品| 一区二区三区国产| 狠狠噜噜久久| 欧美激情中文字幕| 91小宝寻花一区二区三区| 欧美精品视频www在线观看| 婷婷开心久久网| 99亚洲一区二区| 亚洲欧美综合网| 成人aa视频在线观看| 日韩一区二区在线观看视频播放 | 免费在线观看视频一区| 久久经典综合| 亚洲bt欧美bt精品| 午夜一区不卡| 性欧美疯狂xxxxbbbb| 亚洲综合社区| 午夜精品在线看| 美女亚洲精品| 无吗不卡中文字幕| 久久资源av| 青青草国产成人99久久| 色综合久久88色综合天天6| 性做久久久久久久久| 亚洲一区免费| 亚洲成av人片| 久久综合久久久| 婷婷开心激情综合| 久久婷婷av| 日韩激情视频在线观看| 欧洲精品一区二区三区在线观看| 美女www一区二区| 欧美日韩不卡在线| 韩国av一区二区三区| 5566中文字幕一区二区电影| 国产成人午夜精品5599| 欧美一区二区福利在线| 激情成人午夜视频| 欧美精品1区2区3区| 国产麻豆成人精品| 精品国产凹凸成av人导航| 色综合天天综合网天天狠天天 | 日韩精品色哟哟| 欧美丝袜自拍制服另类| 国产一区二区三区香蕉| 欧美电影一区二区| 大白屁股一区二区视频| 久久综合色之久久综合| 欧美人与禽猛交乱配| 国产精品三级av在线播放| 狠狠入ady亚洲精品| 亚洲日本韩国一区| 亚洲欧美日韩专区| 裸体一区二区三区| 91精品国产综合久久蜜臀| thepron国产精品| 综合中文字幕亚洲| 久久精品三级| 国产精品亚洲一区二区三区妖精 | 波多野洁衣一区| 亚洲欧洲日韩女同| 米奇777在线欧美播放| 蜜桃精品视频在线| 精品久久久久久无| 亚洲日产国产精品| 免费不卡在线视频| 精品国产露脸精彩对白| 国产综合欧美| 午夜电影网一区| 制服丝袜成人动漫| 欧美日韩在线高清| 日本视频中文字幕一区二区三区| 日韩一区二区麻豆国产| 欧美日韩综合久久| 亚洲一区二区三区国产| 欧美另类一区二区三区| 欧美日韩一区二区三区在线观看免 | 欧美体内she精高潮| 色综合久久综合网97色综合| 一区二区三区欧美激情| 欧美情侣在线播放| 一区精品在线| 麻豆91在线看| 亚洲国产精品传媒在线观看| 久久久噜噜噜| 不卡一区在线观看| 一区二区三区精品视频| 91麻豆精品国产91久久久| 欧美人成在线| 日本不卡视频在线| 久久久久久久免费视频了| 国产精品亚洲综合久久| 国产一区二区三区不卡在线观看| 中文欧美字幕免费| 在线免费精品视频| 欧美黄在线观看| 日韩黄色片在线观看| 久久免费电影网| 亚洲综合精品| k8久久久一区二区三区| 亚洲成av人片一区二区三区 | 亚洲一区二区视频在线| 91精品国产欧美一区二区成人| 亚洲第一在线| 国产成人精品1024| 亚洲成人av一区二区三区| 亚洲精品一区二区三区99| 色网综合在线观看| 色综合婷婷久久| 精品在线一区二区| 国产精品素人视频| 欧美日韩三级一区二区| 亚洲精品1区| 粉嫩高潮美女一区二区三区 | 久久先锋影音av鲁色资源网| 色婷婷av一区二区三区大白胸| 欧美日韩免费| 国产一区二区三区av电影| 一区二区三区在线观看网站| 久久综合狠狠综合久久综合88| 色综合久久久久久久| 国产主播一区二区三区四区| 国模套图日韩精品一区二区| 一区二区三区自拍| 国产亚洲一二三区| 3d动漫精品啪啪1区2区免费| 国产人成精品一区二区三| 国产成人久久精品77777最新版本| 亚洲综合色自拍一区| 欧美激情一区二区| 欧美一区二区三区日韩视频| 一本久久a久久免费精品不卡| 国产精品v欧美精品∨日韩| 国产成人精品亚洲日本在线桃色| 性欧美疯狂xxxxbbbb| 亚洲欧洲精品一区二区精品久久久| 日韩一区二区免费视频| 色悠悠久久综合| 一色屋精品视频在线看| 97精品电影院| 粉嫩嫩av羞羞动漫久久久| 久热成人在线视频| 亚洲一区在线视频| 国产精品第四页| 欧美精品一区二区高清在线观看 | 欧美激情中文字幕一区二区| 欧美sm极限捆绑bd| 欧美日韩国产高清一区| 嫩草成人www欧美| 亚洲美女网站| 国内精品久久久久久久果冻传媒 | 欧美精品一区二区视频 | 亚洲欧美大片| 最新亚洲激情| 亚洲视频一二| 欧美精品二区| 成人爱爱电影网址| 国产精品一区二区视频| 日韩精品成人一区二区在线| 亚洲成人激情社区| 亚洲色图.com| 中文字幕永久在线不卡| 国产精品网站一区| 中文一区在线播放| 久久精品一区蜜桃臀影院| 91麻豆精品国产91久久久| 欧美日韩国产免费| 欧美影院午夜播放| 色激情天天射综合网| 欧美亚洲三区| 亚洲欧美久久| 久久精品毛片| 色婷婷综合五月| 久久久久久国产精品mv| 亚欧成人精品| 久久综合九色综合久99| 性色av一区二区怡红| 免播放器亚洲| 久久婷婷人人澡人人喊人人爽| 毛片一区二区| 色婷婷综合久久久中文一区二区| 乱码第一页成人| 久久综合九色综合欧美狠狠| 久久综合激情| 欧美色窝79yyyycom| 欧美视频中文一区二区三区在线观看| 91久久免费观看| 欧美日韩一区二区三区免费看| 欧美精品日日鲁夜夜添| 欧美一级二级三级蜜桃| 26uuu色噜噜精品一区二区| 国产女主播在线一区二区| 国产精品电影一区二区| 一区二区三区四区视频精品免费| 亚洲精品老司机| 亚洲在线成人精品| 午夜国产精品影院在线观看| 蜜臀a∨国产成人精品|