J'adapte le code suivant (créé via le conseil dans this question), qui a pris un fichier XML et sa DTD et les a convertis dans un format différent. Pour ce problème que la section de chargement est important:Python xml etree DTD à partir d'une source StringIO?
xmldoc = open(filename)
parser = etree.XMLParser(dtd_validation=True, load_dtd=True)
tree = etree.parse(xmldoc, parser)
Cela a bien fonctionné, tout en utilisant le système de fichiers, mais je convertir en exécuter via un framework web, où les deux fichiers sont chargés via un formulaire.
Chargement du fichier xml fonctionne très bien:
tree = etree.parse(StringIO(data['xml_file'])
Mais comme DTD est lié dans le haut du fichier xml, l'instruction suivante échoue:
parser = etree.XMLParser(dtd_validation=True, load_dtd=True)
tree = etree.parse(StringIO(data['xml_file'], parser)
Via this question, j'ai essayé :
etree.DTD(StringIO(data['dtd_file'])
tree = etree.parse(StringIO(data['xml_file'])
Alors que la première ligne ne provoque pas d'erreur, la seconde tombe sur entités unicode la DTD est destiné à ramasser (et ce, dans la version du système de fichiers):
XMLSyntaxError: Entity 'eacute' not defined, line 4495, column 46
Comment puis-je sur le chargement correctement cette DTD?
Ajouté une prime car j'aimerais vraiment une réponse plus détaillée, en utilisant le code ci-dessus comme contexte. –