我最近编写了一个类,使用jinja2将lxml解析的xml格式化为特定的格式。如果可以对xml文档的实际格式进行编码,则可以根据需要对其进行修改:class XMLWriter:
def __init__(self):
self.env = jinja2.Environment()
self.env.filters['depth'] = lambda node: len(list(node.iterancestors('*')))
self.env.filters['is_comment'] = lambda node: node.tag is etree.Comment
self.template = """<?xml version="1.0" encoding="utf-8"?>
{%- for node in rootnode recursive -%}
{{- '\n' + ' '*node|depth -}}
{%- if node|is_comment -%}
{{- node -}}
{%- else -%}
{%- for key,value in node.attrib.iteritems() -%}
{{ '\n ' + ' '*node|depth }}{{ key }}="{{ value }}"
{%- endfor -%}
{% if node|count %}>{% endif %}
{{- loop(node) -}}
{% if node|count %}{{ '\n' + ' '*node|depth }}{{ node.tag }}>{% else %}/>{%- endif -%}
{%- endif -%}
{%- endfor -%}"""
def __call__(self, rootnode):
return self.serialize(rootnode)
def serialize(self, rootnode):
return self.env.from_string(self.template).render(rootnode=[rootnode])
你这样使用这个类:
^{pr2}$