Я пытаюсь использовать этот код
s = """<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd">""" doctype = """<!DOCTYPE doc [ <!ENTITY ent SYSTEM "another_doc.xml"> ]>""" gdml = ET.fromstring(s.encode("UTF-8"))
Но получаю XMLSyntaxError: EndTag
Я хочу со временем добавить также тип документа
Строка, которую вы передаете fromstring(), должна быть правильной XML. Так как у вас есть только стартовый тег, он не правильно сформирован.
fromstring()
Это легко разрешить, закрыв его самостоятельно или добавив конечный тег.
Кроме того, если вы хотите, чтобы объявление XML (<?xml ...?>) было включено в сериализованный XML, Вы можете добавить его к doctype.
<?xml ...?>
doctype
Пример ...
from lxml import etree s = """<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"/>""" doctype = """<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE gdml [ <!ENTITY ent SYSTEM "another_doc.xml"> ]>""" gdml = etree.fromstring(s.encode("UTF-8")) print(etree.tostring(gdml, doctype=doctype).decode())
Это печатает ...
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <!DOCTYPE gdml [ <!ENTITY ent SYSTEM "another_doc.xml"> ]> <gdml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://service-spi.web.cern.ch/service-spi/app/releases/GDML/schema/gdml.xsd"/>