1 """Read in a DOM instance, convert it to a Python object
3 from xml.dom.utils import FileReader
7 def pyobj_printer(py_obj, level=0):
8 """Return a "deep" string description of a Python object"""
9 from string import join, split
12 for membname in dir(py_obj):
13 member = getattr(py_obj,membname)
14 if type(member) == types.InstanceType:
15 descript = descript + (' '*level) + '{'+membname+'}\n'
16 descript = descript + pyobj_printer(member, level+3)
17 elif type(member) == types.ListType:
18 descript = descript + (' '*level) + '['+membname+']\n'
19 for i in range(len(member)):
20 descript = descript+(' '*level)+str(i+1)+': '+ \
21 pyobj_printer(member[i],level+3)
23 descript = descript + membname+'='
24 descript = descript + join(split(str(member)[:50]))+'...\n'
27 def pyobj_from_dom(dom_node):
28 """Converts a DOM tree to a "native" Python object"""
31 for node in dom_node.get_childNodes():
32 if node.name == '#text':
33 py_obj.PCDATA = py_obj.PCDATA + node.value
34 elif hasattr(py_obj, node.name):
35 getattr(py_obj, node.name).append(pyobj_from_dom(node))
37 setattr(py_obj, node.name, [pyobj_from_dom(node)])
41 dom_obj = FileReader("sample_rspec.xml").document
42 py_obj = pyobj_from_dom(dom_obj)
43 if __name__ == "__main__":
44 print pyobj_printer(py_obj)