任务备忘(已经完成):用python写一个格式化xml字符串的程序

原文链接: http://www.cnblogs.com/kgtone/p/9601918.html

功能:

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()

转载于:https://www.cnblogs.com/kgtone/p/9601918.html

猜你喜欢

转载自blog.csdn.net/weixin_30929011/article/details/94786328