xmldoc2json-3.0.py 2.6 KB

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