返回

格式化xml日志

发布时间:2022-10-29 06:34:49 301
import xml.etree.cElementTree as ETimport reimport os
  class FormatXML: """ 格式化xml """
  def __init__(self): self.format_result=''
  def format_xml_source(self, fp, encoding='utf-8'): """ 从本地文件中解析xml文件 :param fp: 文本文件 :param encoding: 编码方式 默认 utf-8 :return: 格式化之后的xml """ if not os.path.exists(fp): print('%s资源不存在' % fp) with open(fp, 'rb', encoding=encoding) as f: xml_str=f.read().decode(encoding=encoding) f.close() self.format_xml_str(xml_str) return self.format_result
  def format_xml_str(self, xml_str): """ 格式化xml字符串 :param xml_str: xml字符串 :return: 格式化之后的xml字符串 """ # 将字符串xml转化成一个Element对象 el=ET.XML(xml_str) # xml声明的正则表达式 用于在xml中查找是否包含xml声明 如果包含声明自动添加 如果不包则不添加声明 pattern=']*?\?>' match=re.match(pattern, xml_str) if match is not None: self.format_result=match.group() + '
  ' self.format_xml(0, el) return self.format_result
  def format_xml(self, indent, el): """ 解析xml字符串 并将每一个节点拼接生成新的格式化之xml字符串 :param indent: 层级 :param el: 节点对象 :return: None """ # 获取节点标签 tag=el.tag # 获取el节点的子节点 children=el.getchildren() # 如果当前节点含有子节点,将添加当前节点的左标签, 之后做递归操作 if len(children) !=0: l_tag=(' ' * indent) + '' + '
  ' self.format_result=self.format_result + l_tag for child in children: self.format_xml(indent + 1, child) # 获取el节点的文本值 text=el.text # 如果当前标签含有文本值,将整体添加当前标签 if text !='' and text is not None: node=(' ' * indent) + '' + text + '' + tag + '>' + '
  ' self.format_result=self.format_result + node else: # 如果当前没有文本值 先判断当前节点是否含有子节点 可能是空标签 如果是空标签 将添加整体标签 if len(children)==0: node=(' ' * indent) + '' + '' + tag + '>' + '
  ' self.format_result=self.format_result + node else: r_tag=(' ' * indent) + '' + tag + '>' + '
  ' self.format_result=self.format_result + r_tag
1.8' \ '

1.8


utf-8






' format_xml=FormatXML() format_xml.format_xml_str(str_xml) print(format_xml.format_result)
1.8

1.8


utf-8







  Process finished with exit code 0
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
格式化前的xml 2022-10-29 06:24:04