testing parsing file initial check in
authorReed Moran <rmoran@cs.princeton.edu>
Wed, 21 Jan 2009 01:42:12 +0000 (01:42 +0000)
committerReed Moran <rmoran@cs.princeton.edu>
Wed, 21 Jan 2009 01:42:12 +0000 (01:42 +0000)
rspec/testparse.py [new file with mode: 0644]

diff --git a/rspec/testparse.py b/rspec/testparse.py
new file mode 100644 (file)
index 0000000..dbce619
--- /dev/null
@@ -0,0 +1,44 @@
+"""Read in a DOM instance, convert it to a Python object
+"""
+from xml.dom.utils import FileReader
+
+class PyObject: pass
+
+def pyobj_printer(py_obj, level=0):
+    """Return a "deep" string description of a Python object"""
+    from string import join, split
+    import types
+    descript = ''
+    for membname in dir(py_obj):
+        member = getattr(py_obj,membname)
+        if type(member) == types.InstanceType:
+            descript = descript + (' '*level) + '{'+membname+'}\n'
+            descript = descript + pyobj_printer(member, level+3)
+        elif type(member) == types.ListType:
+            descript = descript + (' '*level) + '['+membname+']\n'
+            for i in range(len(member)):
+                descript = descript+(' '*level)+str(i+1)+': '+ \
+                           pyobj_printer(member[i],level+3)
+        else:
+            descript = descript + membname+'='
+            descript = descript + join(split(str(member)[:50]))+'...\n'
+    return descript
+
+def pyobj_from_dom(dom_node):
+    """Converts a DOM tree to a "native" Python object"""
+    py_obj = PyObject()
+    py_obj.PCDATA = ''
+    for node in dom_node.get_childNodes():
+        if node.name == '#text':
+            py_obj.PCDATA = py_obj.PCDATA + node.value
+        elif hasattr(py_obj, node.name):
+            getattr(py_obj, node.name).append(pyobj_from_dom(node))
+        else:
+            setattr(py_obj, node.name, [pyobj_from_dom(node)])
+    return py_obj
+
+# Main test
+dom_obj = FileReader("sample_rspec.xml").document
+py_obj = pyobj_from_dom(dom_obj)
+if __name__ == "__main__":
+    print pyobj_printer(py_obj)
\ No newline at end of file