xmldoc2json-2.1.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/python
  2. import sys
  3. import xml.etree.ElementTree as ET
  4. import json
  5. def parseClass(data):
  6. dictCls = dict(data.attrib)
  7. dictCls['brief_description'] = data.find("brief_description").text.strip()
  8. dictCls['description'] = data.find("description").text.strip()
  9. dictCls['methods'] = []
  10. for m in data.find("methods"):
  11. dictCls['methods'].append(parseMethod(m))
  12. dictCls['signals'] = []
  13. for s in (data.find("signals") if data.find("signals") is not None else []):
  14. dictCls['signals'].append(parseMethod(s))
  15. dictCls['constants'] = []
  16. for c in (data.find("constants") if data.find("constants") is not None else []):
  17. dictCls['constants'].append(parseConstant(c))
  18. dictCls['properties'] = []
  19. for m in (data.find("members") if data.find("members") is not None else []):
  20. dictCls['properties'].append(parseProperty(m))
  21. dictCls['theme_properties'] = []
  22. for thi in (data.find("theme_items") if data.find("theme_items") is not None else []):
  23. dictCls['theme_properties'].append(parseProperty(thi))
  24. return dictCls
  25. def parseMethod(data):
  26. dictMethod = dict(data.attrib)
  27. dictMethod['description'] = data.find("description").text.strip()
  28. dictMethod['return_type'] = data.find("return").attrib["type"] if data.find("return") is not None else ""
  29. if "qualifiers" not in dictMethod: dictMethod["qualifiers"] = ""
  30. dictMethod["arguments"] = []
  31. for arg in data.iter('argument'):
  32. dictMethod["arguments"].append(parseArgument(arg))
  33. return dictMethod
  34. def parseArgument(data):
  35. dictArg = dict(data.attrib)
  36. if "dictArg" in dictArg: dictArg.pop("index")
  37. dictArg["default_value"] = dictArg["default"] if "default" in dictArg else ""
  38. if "default" in dictArg: dictArg.pop("default")
  39. return dictArg
  40. def parseConstant(data):
  41. dictConst = dict(data.attrib)
  42. dictConst["description"] = data.text.strip()
  43. return dictConst
  44. def parseProperty(data):
  45. dictProp = dict(data.attrib)
  46. dictProp["description"] = data.text.strip()
  47. return dictProp
  48. def main():
  49. if len(sys.argv) >=2 :
  50. tree = ET.parse(open(sys.argv[1], 'r'))
  51. classes = {}
  52. for cls in tree.getroot():
  53. dictCls = parseClass(cls)
  54. classes[dictCls['name']] = dictCls
  55. jsonContent = json.dumps({"classes": classes, "version": "2.1.4"}, ensure_ascii=False, indent=2)
  56. print(jsonContent)
  57. if __name__ == '__main__':
  58. main()