From 6f4ed24eac102f3e053520d72e2f3a677314488a Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 5 Feb 2019 10:20:03 +0100 Subject: [PATCH] Recovering parser is needed for files where strings like (#910) xmlns:ds="http://www.w3.org/2000/09/xmldsig#"" are present: even if lxml raises {XMLSyntaxError}xmlns:ds: 'http://www.w3.org/2000/09/xmldsig#"' is not a valid URI such files are accepted by SDI --- l10n_it_fatturapa/models/ir_attachment.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/l10n_it_fatturapa/models/ir_attachment.py b/l10n_it_fatturapa/models/ir_attachment.py index 5643a9704446..4d9c45c30382 100644 --- a/l10n_it_fatturapa/models/ir_attachment.py +++ b/l10n_it_fatturapa/models/ir_attachment.py @@ -112,7 +112,14 @@ def decrypt_to_xml(self, signed_file, xml_file): return xml_file def remove_xades_sign(self, xml): - root = ET.XML(xml) + # Recovering parser is needed for files where strings like + # xmlns:ds="http://www.w3.org/2000/09/xmldsig#"" + # are present: even if lxml raises + # {XMLSyntaxError}xmlns:ds: + # 'http://www.w3.org/2000/09/xmldsig#"' is not a valid URI + # such files are accepted by SDI + recovering_parser = ET.XMLParser(recover=True) + root = ET.XML(xml, parser=recovering_parser) for elem in root.iter('*'): if elem.tag.find('Signature') > -1: elem.getparent().remove(elem) @@ -120,7 +127,8 @@ def remove_xades_sign(self, xml): return ET.tostring(root) def strip_xml_content(self, xml): - root = ET.XML(xml) + recovering_parser = ET.XMLParser(recover=True) + root = ET.XML(xml, parser=recovering_parser) for elem in root.iter('*'): if elem.text is not None: elem.text = elem.text.strip() @@ -168,7 +176,8 @@ def get_fattura_elettronica_preview(self): xslt = ET.parse(xsl_path) xml_string = self.get_xml_string() xml_file = BytesIO(xml_string) - dom = ET.parse(xml_file) + recovering_parser = ET.XMLParser(recover=True) + dom = ET.parse(xml_file, parser=recovering_parser) transform = ET.XSLT(xslt) newdom = transform(dom) return ET.tostring(newdom, pretty_print=True)