def xml_parse(xml_str):
class EchoTarget(object):
def __init__(self):
self.data_list = []
self.data_dict = {}
self.tag = ''
self.value = ''
self.attr = ''
def start(self, tag, attrib):
# start 在元素打开时触发。数据和元素的子元素仍不可用。
self.tag = tag
if dict(attrib):
self.attr = dict(attrib)
# print("start %s %r" % (tag, dict(attrib)))
def end(self, tag):
# end 在元素关闭时触发。所有元素的子节点,包括文本节点,现在都是可用的。
if self.value:
self.data_list.append(dict(
key=self.tag,
value=self.value,
attr=self.attr
))
# print("end %s" % tag)
def data(self, dt):
# data 触发文本子节点并访问该文本。
if isinstance(dt, str):
if dt.strip():
self.value = dt
# print("data %r" % dt)
def comment(self, text):
print("comment %s" % text)
def close(self):
# close 在解析完成后触发。
return self.data_list
# 解析xml字符串
parser = etree.XMLParser(target=EchoTarget())
return etree.XML(xml_str, parser)
网友评论