任務備忘(已經完成):用python寫一個格式化xml字符串的程序


功能:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM