@@ -146,7 +146,6 @@ def from_filename(klass, fname, **kwargs):
146146class CaretSpecParser (xml .XmlParser ):
147147def __init__ (self ,encoding = None ,buffer_size = 3500000 ,verbose = 0 ):
148148super ().__init__ (encoding = encoding ,buffer_size = buffer_size ,verbose = verbose )
149- self .fsm_state = []
150149self .struct_state = []
151150
152151self .caret_spec = None
@@ -164,8 +163,7 @@ def StartElementHandler(self, name, attrs):
164163elif name == 'MetaData' :
165164self .caret_spec .metadata = CaretMetaData ()
166165elif name == 'MD' :
167- self .fsm_state .append ('MD' )
168- self .struct_state .append (['' ,'' ])
166+ self .struct_state .append ({})
169167elif name in ('Name' ,'Value' ):
170168self .write_to = name
171169elif name == 'DataFile' :
@@ -181,13 +179,9 @@ def StartElementHandler(self, name, attrs):
181179
182180def EndElementHandler (self ,name ):
183181self .flush_chardata ()
184- if name == 'CaretSpecFile' :
185- ...
186- elif name == 'MetaData' :
187- ...
188- elif name == 'MD' :
189- key ,value = self .struct_state .pop ()
190- self .caret_spec .metadata [key ]= value
182+ if name == 'MD' :
183+ MD = self .struct_state .pop ()
184+ self .caret_spec .metadata [MD ['Name' ]]= MD ['Value' ]
191185elif name in ('Name' ,'Value' ):
192186self .write_to = None
193187elif name == 'DataFile' :
@@ -212,23 +206,12 @@ def flush_chardata(self):
212206if self ._char_blocks is None :
213207return
214208
215- # Just join the strings to get the data. Maybe there are some memory
216- # optimizations we could do by passing the list of strings to the
217- # read_data_block function.
218- data = '' .join (self ._char_blocks )
209+ data = '' .join (self ._char_blocks ).strip ()
219210# Reset the char collector
220211self ._char_blocks = None
221212# Process data
222- if self .write_to == 'Name' :
223- data = data .strip ()# .decode('utf-8')
224- pair = self .struct_state [- 1 ]
225- pair [0 ]= data
226-
227- elif self .write_to == 'Value' :
228- data = data .strip ()# .decode('utf-8')
229- pair = self .struct_state [- 1 ]
230- pair [1 ]= data
213+ if self .write_to in ('Name' ,'Value' ):
214+ self .struct_state [- 1 ][self .write_to ]= data
231215
232216elif self .write_to == 'DataFile' :
233- data = data .strip ()
234217self .struct_state [- 1 ].uri = data