功能:

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('')
printXml(xml_str) main()

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

  1. 使用python写一个最基本的mapreduce程序

    一个mapreduce程序大致分成三个部分,第一部分是mapper文件,第二个就是reducer文件,第三部分就是使用hadoop command 执行程序. 在这个过程中,困惑我最久的一个问题就是在 ...

  2. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  3. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  4. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  5. [py]python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

  6. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  7. 用python写一个自动化盲注脚本

    前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...

  8. python写一个能变身电光耗子的贪吃蛇

    python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...

  9. 使用Python写的第一个网络爬虫程序

    今天尝试使用python写一个网络爬虫代码,主要是想訪问某个站点,从中选取感兴趣的信息,并将信息依照一定的格式保存早Excel中. 此代码中主要使用到了python的以下几个功能,因为对python不 ...

随机推荐

  1. 屏蔽QQ黄钻官方团队送礼物的方法

    按照在网上查到的方法: 登录手机QQ \(\longrightarrow\) 好友动态 \(\longrightarrow\) 个人主页 \(\longrightarrow\) 右上角三道杠 \(\l ...

  2. 7天学完Java基础之4/7

    静态static 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据 静态static 关键字修饰成员变量 public class St ...

  3. Brush (III) LightOJ - 1017

    Brush (III) LightOJ - 1017 题意:有一些点,每刷一次可以将纵坐标在区间(y1,y1+w)范围内的所有点刷光,y1为任何实数.最多能刷k次,求最多共能刷掉几个点. 先将点按照纵 ...

  4. android draw9patch工具使用

    1.作用 将图片制作android .9图片xxx.9.png  xxx.9.jpg xxx.9.gif  这些图片在android上拉伸时,边角不变形,不影响效果. 2.工具位置 Android的S ...

  5. 用eclipse-inst-win64.exe安装eclipse出现Java for Windows Missing 的原因

    Java for Windows Missing 因为jdk的版本没有对,我这里是64位的机器上安了32位的jdk,所以一直报这个. 必须换上相对应版本的jdk,提示页面有链接,直接点击就可以下载. ...

  6. SpringMVC的Controller的返回值与接收的参数

    内容参考自博客: http://blog.csdn.net/u011001084/article/details/52846791 http://blog.csdn.net/xuxiaoyinliu/ ...

  7. css中常见中文字体的英文名称

    曾经看过一些文章,建议CSS中字体应用英文来替代,但一直未引起我重视.最近官网改版,今天同事测试发现Mac的Safari总是显示宋体 → → 修改font-family:"微软雅黑" ...

  8. 学好Mac常用命令,助力iOS开发

    原文出处: Jack_lin(@Jack_Lin_IOS ) 厚重·技术 序言 在iOS开发的过程中,更多地注重iOS开发的效率,熟练使用Mac终端操作的常用命令,可以让你更好的游刃于iOS繁重的开发 ...

  9. AJPFX关于对集合中的元素删除操作和注意点

    import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class ForeTest2 { ...

  10. Java&Xml教程(十一)JAXB实现XML与Java对象转换

    JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换. 本文以一个简单的例 ...