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


    功能:

    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()
  • 相关阅读:
    爱你就是我的幸福
    科学加艺术 85句管理名言
    转:IPV6及在UBUNTU和windows下的安装
    JXSE是否可以实现非阻塞IO?
    Transmitting and Receiving RTP over Custom Transport Layer
    多显示器
    可靠的双向管道和不可靠的双向管道
    the source for JMStudio
    转:浅析 Java Thread.join()
    Building Scalable and High Efficient Java Multimedia Collaboration
  • 原文地址:https://www.cnblogs.com/kgtone/p/9601918.html
Copyright © 2020-2023  润新知