Как включить длинную строку base64 в XML, написанный фабрикой элементов lxml? - PullRequest
0 голосов
/ 17 мая 2018

Я использую фабрику элементов lxml в Python 3 для создания XML-файла, содержащего PDF-файлы в кодировке base64.Файл XML будет использоваться для импорта данных в программное обеспечение базы данных, поэтому схема не может быть изменена.

При создании файла XML lxml жалуется на длину строки base64:

    article = E.article(
        E.galley(
            E.label('PDF'),
            E.file(
                ET.XML("<embed filename=\"" + row['galley'] + ".pdf\"" 
                                            + " encoding=\"base64\" mime_type=\"application/pdf\" >" 
                                            + str(base64fulltext)
                                            + "</embed>")
            ), self.LOCALE(row['language']),
        ), self.LANGUAGE(row['language'])
    )

При запуске всего сценария сообщение об ошибке ('строка 45') указывает на строку, где в приведенном выше фрагменте кода указано str(base64fulltext).Сообщение об ошибке выглядит следующим образом:

(lxml) vboxadmin@linux-x3el:~/repos/x> python3 test-csvFileImport.py
Traceback (most recent call last):
  File "test-csvFileImport.py", line 65, in <module>
    articlePdfBase64)
  File "/home/vboxadmin/repos/x/y/writer.py", line 45, in exportArticle
    + "</embed>")
  File "src/lxml/etree.pyx", line 3192, in lxml.etree.XML
  File "src/lxml/parser.pxi", line 1876, in lxml.etree._parseMemoryDocument
  File "src/lxml/parser.pxi", line 1757, in lxml.etree._parseDoc
  File "src/lxml/parser.pxi", line 1067, in lxml.etree._BaseParser._parseUnicodeDoc
  File "src/lxml/parser.pxi", line 600, in lxml.etree._ParserContext._handleParseResultDoc
  File "src/lxml/parser.pxi", line 710, in lxml.etree._handleParseResult
  File "src/lxml/parser.pxi", line 639, in lxml.etree._raiseParseError
  File "<string>", line 1
lxml.etree.XMLSyntaxError: xmlSAX2Characters: huge text node, line 1, column 10027189

Ожидаемый результат состоял бы в том, что строка base64 была бы записана в XML-файл.

До сих пор я мог только найти, что тамэто опция "огромный_три" в lxml.etree.iterparse (http://lxml.de/api/lxml.etree.iterparse-class.html),, но я не уверен, смогу ли я использовать это для решения своей проблемы.

В качестве обходного пути я рассматриваю возможность использованиязамена строки для вставки строки base64 в xml после ее записи в файл, однако я был бы более рад использовать правильное решение lxml, если бы кто-нибудь мог предложить его. Спасибо!

...