Skip to content

Commit a0bfd94

Browse files
committed
Python parser with etree instead of minidom
1 parent c8e4400 commit a0bfd94

1 file changed

Lines changed: 9 additions & 11 deletions

File tree

‎pythonpythonparser.py‎

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@
22

33
import ast
44
from xml.dom.minidom import Document
5+
from lxml import etree
56
import types
67
import sys
78

89
class KDevelopNodeVisitor(ast.NodeVisitor):
9-
xmlrepr = Document()
10-
basenode = None
10+
basenode = etree.Element("pythonast")
1111
currentnode = None
1212
nodecnt = 0
1313
childNodeMap = {}
1414

1515
def __init__(self, *arg, **args):
1616
super(KDevelopNodeVisitor, self).__init__(*arg, **args)
17-
self.basenode = self.xmlrepr.createElement("pythonast")
18-
self.xmlrepr.appendChild(self.basenode)
1917
self.currentnode = self.basenode
2018

2119
def generic_visit(self, node):
@@ -24,9 +22,9 @@ def generic_visit(self, node):
2422
#self.childNodeMap[self.nodecnt] = node
2523
self.childNodeMap[node] = self.nodecnt
2624

27-
node_xmlrepr = self.xmlrepr.createElement(node.__class__.__name__ + "Ast")
28-
node_xmlrepr.setAttribute('nodecnt', str(self.nodecnt))
29-
self.currentnode.appendChild(node_xmlrepr)
25+
node_xmlrepr = etree.Element(node.__class__.__name__ + "Ast")
26+
node_xmlrepr.set('nodecnt', str(self.nodecnt))
27+
self.currentnode.append(node_xmlrepr)
3028

3129
save_currentnode = self.currentnode
3230
self.currentnode = node_xmlrepr
@@ -39,7 +37,7 @@ def generic_visit(self, node):
3937
value = getattr(node, field)
4038
if type(value) not in [types.IntType, types.StringType, types.FloatType, types.BooleanType]:
4139
continue
42-
node_xmlrepr.setAttribute(field.lower(), str(value))
40+
node_xmlrepr.set(field.lower(), str(value))
4341

4442
super(KDevelopNodeVisitor, self).generic_visit(node)
4543

@@ -56,13 +54,13 @@ def generic_visit(self, node):
5654
sys.stderr.write("Warning: missing key on node " + str(node) + "\n")
5755
multiple_keys.append('')
5856
key = ','.join(multiple_keys)
59-
node_xmlrepr.setAttribute("NRLST_" + field.lower(), str(key))
57+
node_xmlrepr.set("NRLST_" + field.lower(), str(key))
6058
else:
6159
try:
6260
key = self.childNodeMap[value]
6361
except KeyError:
6462
key = ''
65-
node_xmlrepr.setAttribute("NR_" + field.lower(), str(key))
63+
node_xmlrepr.set("NR_" + field.lower(), str(key))
6664

6765

6866
self.currentnode = save_currentnode
@@ -74,4 +72,4 @@ def generic_visit(self, node):
7472
except Exception as e:
7573
sys.stderr.write(str(e.lineno) + ':' + str(e.offset))
7674
else:
77-
sys.stdout.write(v.xmlrepr.toprettyxml(indent = " "))
75+
sys.stdout.write(etree.tostring(v.basenode, xml_declaration=True, pretty_print=True))

0 commit comments

Comments
 (0)