10
10
Thin layer around xml.etree.ElementTree, to abstract nibabel xml support.
11
11
"""
12
12
from xml .etree .ElementTree import Element , SubElement , tostring
13
+ from xml .parsers .expat import ParserCreate
13
14
14
15
15
16
class XmlSerializable (object ):
@@ -23,3 +24,25 @@ def to_xml(self, enc='utf-8'):
23
24
""" Output should be an xml string with the given encoding.
24
25
(default: utf-8)"""
25
26
return tostring (self ._to_xml_element (), enc )
27
+
28
+
29
+ class XmlParser (object ):
30
+ """Thin wrapper around ParserCreate"""
31
+
32
+ def __init__ (self , encoding = None , buffer_size = 3500000 , verbose = 0 ):
33
+ self .parser = ParserCreate (encoding = encoding )
34
+ self .parser .buffer_text = True
35
+ self .parser .buffer_size = buffer_size
36
+ self .verbose = verbose
37
+
38
+ def parse (self , string ):
39
+ HANDLER_NAMES = ['StartElementHandler' ,
40
+ 'EndElementHandler' ,
41
+ 'CharacterDataHandler' ]
42
+ for name in HANDLER_NAMES :
43
+ setattr (self .parser , name , getattr (self , name ))
44
+ return self .parser .Parse (string ) # may throw ExpatError
45
+
46
+ def parse_file (self , filename ):
47
+ with open (filename , 'r' ) as fp :
48
+ return self .parse (fp .read ())
0 commit comments