node.append(el)
def serialize(self, schema="FACTUR-X_BASIC"):
- xml = b'<?xml version="1.0" encoding="UTF-8"?>' + ET.tostring(
- self.to_etree(), "utf-8"
- )
- return validate_xml(xmlout=xml, schema=schema)
+ """
+ Create XML from ZUGFeRD data model
+ :param schema: XML schema
+ :return: ZUGFeRD XML
+ """
+ xml = ET.tostring(self.to_etree(), "utf-8")
+
+ return validate_xml(xml, schema)
def __setattr__(self, key, value):
if (
import logging
import os
-from xml.dom import minidom
logger = logging.getLogger("drafthorse")
-def minify(xml):
- try:
- from lxml import etree
-
- return b'<?xml version="1.0" encoding="UTF-8"?>' + etree.tostring(
- etree.fromstring(xml)
- )
- except ImportError:
- logger.warning("Could not minify output as LXML is not installed.")
- return xml
-
-
-def prettify(xml, **kwargs):
- try:
- from lxml import etree
- except ImportError:
- reparsed = minidom.parseString(xml)
- return reparsed.toprettyxml(indent="\t")
- else:
- parser = etree.XMLParser(remove_blank_text=True, **kwargs)
- return b'<?xml version="1.0" encoding="UTF-8"?>' + etree.tostring(
- etree.fromstring(xml, parser), pretty_print=True
- )
-
-
def validate_xml(xmlout, schema):
try:
from lxml import etree
)
parser = etree.XMLParser(schema=schema)
xml_root = etree.fromstring(xmlout, parser)
- return b'<?xml version="1.0" encoding="UTF-8"?>' + etree.tostring(
- xml_root, pretty_print=True
+
+ return etree.tostring(
+ xml_root, pretty_print=True, xml_declaration=True, encoding="UTF-8"
)
import os
import pytest
from difflib import unified_diff
+from xml.dom import minidom
from drafthorse.models.document import Document
-from drafthorse.utils import prettify, validate_xml
+from drafthorse.utils import validate_xml
samples = [
f
]
-def _diff_xml(a, b):
+def diff_xml(a, b):
for line in unified_diff(a.splitlines(), b.splitlines()):
print(line)
+def prettify(xml, **kwargs):
+ try:
+ from lxml import etree
+ except ImportError:
+ reparsed = minidom.parseString(xml)
+ return reparsed.toprettyxml(indent="\t")
+ else:
+ parser = etree.XMLParser(remove_blank_text=True, **kwargs)
+ return etree.tostring(etree.fromstring(xml, parser), pretty_print=True)
+
+
@pytest.mark.parametrize("filename", samples)
def test_sample_roundtrip(filename):
origxml = prettify(
try:
generatedxml = prettify(doc.serialize(schema))
generatedxml = b"\n".join(generatedxml.split(b"\n")[1:]).decode().strip()
- _diff_xml(origxml, generatedxml)
+ diff_xml(origxml, generatedxml)
except lxml.etree.XMLSyntaxError:
generatedxml = prettify(doc.serialize(None))
generatedxml = b"\n".join(generatedxml.split(b"\n")[1:]).decode().strip()
- _diff_xml(origxml, generatedxml)
+ diff_xml(origxml, generatedxml)
raise
# Compare output XML