2010-10-21 16 views
3

Comment générer du XML à partir de types de données non-string en utilisant minidom? J'ai le sentiment que quelqu'un va me dire de générer des cordes avant la main, mais ce n'est pas ce que je cherche.Comment générer du XML à partir de types de données non-string en utilisant minidom?

from datetime import datetime 
from xml.dom.minidom import Document 

num = "1109" 
bool = "false" 
time = "2010-06-24T14:44:46.000" 

doc = Document() 

Submission = doc.createElement("Submission") 
Submission.setAttribute("bool",bool) 
doc.appendChild(Submission) 

Schedule = doc.createElement("Schedule") 
Schedule.setAttribute("id",num) 
Schedule.setAttribute("time",time) 
Submission.appendChild(Schedule) 

print doc.toprettyxml(indent=" ",encoding="UTF-8") 

Ceci est le résultat:

<?xml version="1.0" encoding="UTF-8"?> 
<Submission bool="false"> 
    <Schedule id="1109" time="2010-06-24T14:44:46.000"/> 
</Submission> 

Comment puis-je obtenir des représentations XML valides de types de données non-string?

from datetime import datetime 
from xml.dom.minidom import Document 

num = 1109 
bool = False 
time = datetime.now() 

doc = Document() 

Submission = doc.createElement("Submission") 
Submission.setAttribute("bool",bool) 
doc.appendChild(Submission) 

Schedule = doc.createElement("Schedule") 
Schedule.setAttribute("id",num) 
Schedule.setAttribute("time",time) 
Submission.appendChild(Schedule) 

print doc.toprettyxml(indent=" ",encoding="UTF-8") 

fichier "C: \ Python25 \ lib \ xml \ dom \ minidom.py", à la ligne 299, en _write_data data = data.replace ("&", "& ") .replace (" < "" < «) AttributeError: objet 'bool' n'a pas d'attribut 'remplacer'

Répondre

3

la méthode liée setAttribute attend son second argument, la valeur, comme une chaîne. Vous pouvez aider le processus en convertissant les données en chaînes:

bool = str(False) 

ou, convertissant en chaînes lorsque vous appelez setAttribute:

Submission.setAttribute("bool",str(bool)) 

(et bien sûr, la même chose doit être fait pour num et time).

+0

La chaîne de temps est difficile à générer correctement et ce serait une approche fragile. Il doit y avoir un moyen de prendre un ensemble de résultats à partir d'une requête de base de données, de brancher les valeurs dans des nœuds dom et de le sérialiser correctement sans avoir à créer explicitement des chaînes pour tout. – tponthieux