Skip to content

Commit 4d65a82

Browse files
author
Ben Cipollini
committed
ENH: add xmlutils.XmlParser
1 parent 419da77 commit 4d65a82

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

nibabel/xmlutils.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
Thin layer around xml.etree.ElementTree, to abstract nibabel xml support.
1111
"""
1212
from xml.etree.ElementTree import Element, SubElement, tostring
13+
from xml.parsers.expat import ParserCreate
1314

1415

1516
class XmlSerializable(object):
@@ -23,3 +24,25 @@ def to_xml(self, enc='utf-8'):
2324
""" Output should be an xml string with the given encoding.
2425
(default: utf-8)"""
2526
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

Comments
 (0)