2012-11-08 1 views
2

J'utilise minidom (parmi d'autres) en Python pour tirer une liste de fichiers à partir d'un répertoire, obtenir leurs temps modifiés, autre misc. données, puis écrire ces données dans un fichier XML. Les données s'impriment très bien, mais lorsque j'essaie d'écrire les données dans un fichier, je n'ai que le XML pour l'un des fichiers du répertoire. Voici mon code (je l'ai enlevé une bonne quantité de createElement et appendChild méthodes ainsi que toutes les variables non pertinentes pour des raisons de lisibilité/espace):Ecrire un fichier XML - Tags multiples basés sur des variables

for filename in os.listdir((os.path.join('\\\\10.10.10.80\Jobs\success'))): 

    doc = Document() 
    modTime = datetime.datetime.fromtimestamp(os.path.getmtime('\\\\10.10.10.80\Jobs\success\\'+filename)).strftime('%I:%M:%S %p') 
    done = doc.createElement('Printed Orders') 
    doc.appendChild(done) 
    ordernum = doc.createElement(filename) 
    done.appendChild(ordernum) 
    #This is where other child elements have been removed 

    print doc.toprettyxml(indent=' ') 
    xmlData = open(day_path, 'w') 
    xmlData.write(doc.toprettyxml(indent=' ')) 

Espérons que cela suffit de voir ce qui se passe . Depuis print renvoie les valeurs que je m'attends, je pense que la fonction d'écriture est où je vais mal.

Répondre

2

Si je comprends bien votre itent

vous ne devez pas créer un document différent pour chaque fichier afin que vous devez mettre la création du document et l'écriture du fichier xml en dehors de la boucle

from xml.dom.minidom import Document 
import os,datetime 
path = "/tmp/" 
day_path ="today.xml" 
doc = Document() 
done = doc.createElement('Printed Orders') 

for filename in os.listdir((os.path.join(path))): 

    print "here" 
    modTime = datetime.datetime.fromtimestamp(os.path.getmtime(path+filename)).strftime('%I:%M:%S %p') 
    doc.appendChild(done) 
    ordernum = doc.createElement(filename) 
    done.appendChild(ordernum) 
    #This is where other child elements have been removed 

print doc.toprettyxml(indent=' ') 
xmlData = open(day_path, 'w') 
xmlData.write(doc.toprettyxml(indent=' ')) 

EDIT: pour l'erreur HierarchyRequestErr vous devez mettre la création de l'élément racine en dehors de la boucle aussi

+0

C'est mon intention, un seul fichier contenant toutes les données (Ultimatel Ce sera un fichier créé chaque jour) J'ai essayé ce que vous avez suggéré, mais le fichier de sortie ne contient encore que du XML pour un fichier dans 'os.listdir' En plus,' print' ne renvoie qu'un seul fichier, où comme avant il les a tous retournés. Déplacer 'doc = Document()' en dehors de la boucle renvoie l'erreur: 'HierarchyRequestErr: deux éléments de document interdits' –

+1

La prochaine fois, créez un exemple d'auto-contentement pour pouvoir tester facilement –

+0

Merci @Xavier Combelle après avoir déplacé la création de élément racine tout a parfaitement fonctionné. La prochaine fois, je ferai en sorte de fournir un exemple plus convivial. –

Questions connexes