功能:
1.將xml中多余的空格,換行符去掉,讓xml字符串變成一行。
2.將xml中添加縮進,使用print能正確打印添加縮進后的字符串。
思路:
采用正則表達式來判斷xml中字符串的類型:
1.文件頭
2.判斷元素的種類:帶有屬性的標簽,沒有屬性的標簽,標簽內結束的標簽,只含有文本的標簽,不含有文本的標簽。
3.根據標簽的級別添加換行符后面的空格
'\n'+i*' '
已經完成,使用python與正則表達式。
import re def getData(file_name): path="D:\\Python\\xml\\"+file_name+".txt" str='' with open(path,'r',encoding='utf-8') as f: for line in f.readlines(): str=str+line return str.strip() def getSpace(level): space='\n' for i in range(level): space=space+' ' return space def printXml(xml_str): #xml_list=xml_str.split('([>])') new_xml_list="" head=xml_str[0:9] xml_str=xml_str[9:] xml_list=re.split(r'([>])',xml_str) xml_list = ["".join(i) for i in zip(xml_list[0::2],xml_list[1::2])] level=0 for node in xml_list: if(re.match(r'<\?xml .*version.*\?>',node)): new_xml_list=new_xml_list+new_xml_list+node continue elif(re.match(r'<[^\?^/].*[^/]>',node)): new_xml_list=new_xml_list+getSpace(level)+node level=level+1 continue elif(re.match(r'</.*[^/]>',node)): level=level-1 new_xml_list=new_xml_list+getSpace(level)+node continue elif(re.match(r'<[^/].*/>',node)): new_xml_list=new_xml_list+getSpace(level)+node elif(re.match(r'.+</.*[^/]>',node)): new_xml_list=new_xml_list+node level=level-1 else: print(node) print(new_xml_list) def main(): xml_str=getData('1000') printXml(xml_str) main()