功能:
1.将xml中多余的空格,换行符去掉,让xml字符串变成一行。
2.将xml中添加缩进,使用print能正确打印添加缩进后的字符串。
思路:
采用正则表达式来判断xml中字符串的类型:
1.文件头
2.判断元素的种类:带有属性的标签,没有属性的标签,标签内结束的标签,只含有文本的标签,不含有文本的标签。
3.根据标签的级别添加换行符后面的空格
' '+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=' ' 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()