Я использую фабрику элементов 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, если бы кто-нибудь мог предложить его. Спасибо!