У меня проблемы с проверкой XML, который я должен сгенерировать.Я пытаюсь следовать руководству lxml, но оно использует строки, и пример выглядит следующим образом:
>>> f = StringIO('''\
... <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
... <xsd:element name="a" type="AType"/>
... <xsd:complexType name="AType">
... <xsd:sequence>
... <xsd:element name="b" type="xsd:string" />
... </xsd:sequence>
... </xsd:complexType>
... </xsd:schema>
... ''')
>>> xmlschema_doc = etree.parse(f)
>>> xmlschema = etree.XMLSchema(xmlschema_doc)
>>> valid = StringIO('<a><b></b></a>')
>>> doc = etree.parse(valid)
>>> xmlschema.validate(doc)
True
В моем случае у меня есть XSD-файл, поэтому я пытаюсь это:
from lxml import etree as ET
root = ET.Element('root_name', nsmap={'xsi': 'http://www.w3.org/2001/XMLSchema-instance'})
sub_element = (root, 'sub_element_name')
generated_xml = ET.parse(StringIO(ET.tostring(root)))
xsd_doc = ET.parse(xsd_file)
xmlschema = ET.XMLSchema(xsd_doc)
xmlschema.validate(generated_xml)
Я знаю, что это неправильно, потому что я получаю ошибки, но я хотел бы знать, как мне это сделать.