#1 Le 18/03/2021, à 11:14
- DonutMan75
Python et écriture au format xml...
Bonjour à tous,
je cherche à obtenir avec python un fichier xml qui ait *exactement* cette tête là :
<?xml version="1.0"?>
<Root type="xml">
<!--Generation time UTC=2020-12-01T10:30:35-->
<Logiciel version="2.0"></Logiciel>
</Root>
Vous noterez en particulier :
l'indentation hiérarchique et les retours à la ligne
la non-utilisation des formats cours pour les balises vides
Ainsi, je veux pas obtenir :
<Logiciel version="2.0"/>
Mais bel et bien :
<Logiciel version="2.0"></Logiciel>
Je me suis basé sur les modules suivants :
import xml.etree.ElementTree as ET
from xml.dom import minidom
Mon soucis :
- ElementTree permet d'interdire l'utilisation des formats courts MAIS ne fait pas de "jolis" retours à la ligne avec indentation automatique
- Minidom fait du "fancy printing" MAIS utilise automatiquement les formats courts
Voici mes deux essais :
Essai 1 : utilisation uniquement de ElementTree
import datetime as dt
import xml.etree.ElementTree as ET
root = ET.Element("Root", attrib={"type":"xml"});
root.append(ET.Comment("Generation time %s" % dt.strftime(dt.now(), 'UTC=%Y-%m-%dT%H:%M:%S') ))
root.append(ET.Element("Logiciel", attrib={"version":"2.0"}))
xml_string = ET.tostring(root, encoding='utf-8', xml_declaration=True, short_empty_elements=False)
print(xml_string)
b'<?xml version=\'1.0\' encoding=\'utf-8\'?>\n<Root type="xml"><!--Generation time UTC=2021-03-18T10:54:48--><Logiciel version="2.0"></Logiciel></Root>'
Vous noterez que j'ai bien "<Logiciel version="2.0"></Logiciel>" (grâce à l'option "short_empty_elements" positionnée à False)
Essai2 : ajout de la fonction toprettyxml du module minidom
J'obtiens les retours à la ligne et l'indentation MAIS je perds le short_empty_elements
reparsed = minidom.parseString(xml_string)
xml_string_2 = reparsed.toprettyxml(indent=" ")
print(xml_string_2)
<?xml version="1.0" ?>
<Root type="xml">
<!--Generation time UTC=2021-03-18T10:54:48-->
<Logiciel version="2.0"/>
</Root>
Avez-vous une idée pour résoudre ce problème ?
Merci d'avance !!
Donut
Hors ligne
#2 Le 18/03/2021, à 15:05
- Arbiel
Re : Python et écriture au format xml...
Bonjour
Je n'ai pas lu la totalité de ton message. Je peux cependant te faire part de ma petite expérience xml avec Python. J'ai initialement utilisé les mêmes modules que toi, avec difficulté. J'utilise maintenant BeautifulSoup qui me va beaucoup mieux.
Je ne peux pas te dire si ce module te permet d'avoir les indentations souhaitées ni les balises vides comme tu le souhaites, mais sa facilité d'utilisation me pousse à te conseiller de l'essayer.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#3 Le 18/03/2021, à 17:43
- DonutMan75
Re : Python et écriture au format xml...
Hello Arbiel,
merci pour ton retour !
Je vais creuser dans cette direction
A bientôt,
D.
Hors ligne