diff --git a/glymur/jp2box.py b/glymur/jp2box.py index d205e1b..15471a5 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -1608,7 +1608,7 @@ class XMLBox(Jp2kBox): offset of the box from the start of the file. longname : str more verbose description of the box. - xml : ElementTree.Element + xml : ElementTree object XML section. """ def __init__(self, xml=None, filename=None, length=0, offset=-1): @@ -1636,10 +1636,7 @@ class XMLBox(Jp2kBox): msg = Jp2kBox.__str__(self) xml = self.xml if self.xml is not None: - try: - msg += _pretty_print_xml(self.xml) - except TypeError: - msg += _pretty_print_xml(self.xml.getroot()) + msg += _pretty_print_xml(self.xml) else: msg += '\n {0}'.format(xml) return msg @@ -1682,7 +1679,8 @@ class XMLBox(Jp2kBox): text = text.rstrip('\0') try: - xml = ET.fromstring(text) + elt = ET.fromstring(text) + xml = ET.ElementTree(elt) except ParseError as parse_error: msg = 'A problem was encountered while parsing an XML box: "{0}"' msg = msg.format(str(parse_error)) @@ -1926,13 +1924,11 @@ class UUIDBox(Jp2kBox): # XMP data. Parse as XML. Seems to be a difference between # ElementTree in version 2.7 and 3.3. if sys.hexversion < 0x03000000: - #parser = ET.XMLParser(encoding='utf-8') - #import pdb; pdb.set_trace() - #self.data = ET.fromstringlist(raw_data, parser=parser) - self.data = ET.fromstring(raw_data) + elt = ET.fromstring(raw_data) else: text = raw_data.decode('utf-8') - self.data = ET.fromstring(text) + elt = ET.fromstring(text) + self.data = ET.ElementTree(elt) elif the_uuid.bytes == b'JpgTiffExif->JP2': exif_obj = Exif(raw_data) ifds = OrderedDict() @@ -2555,8 +2551,8 @@ def _pretty_print_xml(xml, level=0): """Pretty print XML data. """ xml = copy.deepcopy(xml) - _indent(xml, level=level) - xmltext = ET.tostring(xml).decode('utf-8') + _indent(xml.getroot(), level=level) + xmltext = ET.tostring(xml.getroot()).decode('utf-8') # Indent it a bit. lst = [(' ' + x) for x in xmltext.split('\n')] diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index 8fa566e..178d4a0 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -365,7 +365,7 @@ class TestXML(unittest.TestCase): j2k.wrap(tfile.name, boxes=boxes) jp2 = Jp2k(tfile.name) self.assertEqual(jp2.box[3].box_id, 'xml ') - self.assertEqual(ET.tostring(jp2.box[3].xml), + self.assertEqual(ET.tostring(jp2.box[3].xml.getroot()), b'0') @unittest.skipIf(os.name == "nt", diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index 0371acf..4aab788 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -4021,7 +4021,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[1].compatibility_list[1], 'jp2 ') # XML box - tags = [x.tag for x in jp2.box[2].xml] + tags = [x.tag for x in jp2.box[2].xml.getroot()] self.assertEqual(tags, ['{http://www.jpeg.org/jpx/1.0/xml}' + 'GENERAL_CREATION_INFO']) @@ -4046,7 +4046,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) # XML box - tags = [x.tag for x in jp2.box[4].xml] + tags = [x.tag for x in jp2.box[4].xml.getroot()] self.assertEqual(tags, ['{http://www.jpeg.org/jpx/1.0/xml}CAPTION', '{http://www.jpeg.org/jpx/1.0/xml}LOCATION', '{http://www.jpeg.org/jpx/1.0/xml}EVENT']) @@ -4376,13 +4376,13 @@ class TestSuiteDump(unittest.TestCase): self.assertIsNone(jp2.box[2].box[1].colorspace) # XML box - tags = [x.tag for x in jp2.box[3].xml] + tags = [x.tag for x in jp2.box[3].xml.getroot()] self.assertEqual(tags, ['{http://www.jpeg.org/jpx/1.0/xml}' + 'GENERAL_CREATION_INFO']) # XML box - tags = [x.tag for x in jp2.box[5].xml] + tags = [x.tag for x in jp2.box[5].xml.getroot()] self.assertEqual(tags, ['{http://www.jpeg.org/jpx/1.0/xml}CAPTION', '{http://www.jpeg.org/jpx/1.0/xml}LOCATION',