Skip to content

Instantly share code, notes, and snippets.

@larryhou
Created September 3, 2021 07:10
Show Gist options
  • Save larryhou/f559f94558bacec81069fb988f3ddc51 to your computer and use it in GitHub Desktop.
Save larryhou/f559f94558bacec81069fb988f3ddc51 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import json
import lxml.etree as etree
def parse(item): # type: (etree.Element)->any
keys = list(item.keys())
if len(item) == 0:
if len(keys) == 0: return item.text
return dict([(k, item.get(k)) for k in keys])
else:
data = dict([(k, item.get(k)) for k in keys])
for c in item:
t = c.tag # type: str
if t in data:
if isinstance(data[t], list): data[t].append(parse(c))
else: data[t] = [data[t], parse(c)]
else: data[t] = parse(c)
return data
def main():
import sys
for name in sys.argv[1:]:
data = etree.parse(open(name, 'r')).getroot()
print(json.dumps(parse(data), indent=4, ensure_ascii=False))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment