格式化xml日志

相关标签:
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
文章来源: https://blog.51cto.com/yetaotao/5796350
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报