1. Page d'accueil
  2. Informatique
  3. Bouts de code
  4. Python

Nettoyage de DOM après usage de xml.dom.minidom.toprettyxml()

cleandom

Objectif

Comme la plupart des bibliothèques/modules permettant de manipuler des fichiers XML, minidom dispose d’une fonctionnalité pour mettre en forme la sortie d’un fichier XML. Le problème est que lorsqu’un tel fichier est ensuite réimporté via minidom, tous les détails de la mise en forme sont considérés comme des éléments du Document Object Model qui est lu. Le but était donc de disposer d’une fonction qui parcourt récursivement le DOM afin de supprimer ces éléments.

Le code

 
import xml.dom.minidom
 
def cleanDoc(document,indent="",newl=""):
    node=document.documentElement
    cleanNode(node,indent,newl)
 
def cleanNode(currentNode,indent,newl):
    filter=indent+newl
    if currentNode.hasChildNodes:
        for node in currentNode.childNodes:
            if node.nodeType == 3:
                node.nodeValue = node.nodeValue.lstrip(filter).strip(filter)
                if node.nodeValue == "":
                    currentNode.removeChild(node)
        for node in currentNode.childNodes:
            cleanNode(node,indent,newl)
 

Utilisation

 
import xml.dom.minidom
import cleandom
 
indom=xml.dom.minidom.parseString("<members><typeList></typeList><memberList></memberList></members>")
 
outfile = open('stdout.txt','w')
outfile.write(indom.toprettyxml())
outfile.close()
 
mydom=xml.dom.minidom.parse('stdout.txt')
print 'output of an already prettied dom'
print mydom.toprettyxml()
 
print 'output after cleaning'
cleandom.cleanDoc(mydom,"\t","\n")
print mydom.toprettyxml()
 

# Publié le 08-06-2007 à 18:30 par Christophe Garrigue.
Dans la rubrique Python.

Add a comment



Mention légale

Mention légale

Ce site personnel me sert principalement pour regrouper en un seul endroit tout ce que je publie sur Internet, ainsi que mes dessins et les quelques dossiers que j'ai eu l''occasion de faire au cours de mes études.
Tout le contenu de ce site est ma propriété exclusive et ne peut être réutilisé sans en faire la demande, sauf mention contraire (article sous une des licenses Creative Common par exemple). Il est toutefois possible de citer des parties des articles ici publiés comme le prévoit le code pénal français.
Police de bannière par Caffeen.