2010-05-06 7 views
3

Im essayant de transmettre certaines données de mon moteur Google App datastore xml de sorte qu'un fichier flash peut lire,arrêt minidom conversion < >-< >

Le problème est lors de l'utilisation CDATA balises xml fourni en sortie contient à la place &lt; de <

par exemple

<name>&lt;![CDATA][name]]&gt;</name> 

ici est mon python qui fournit en sortie xml:

doc = Document() 

    feed = doc.createElement("feed") 
    doc.appendChild(feed) 
    tags_element = doc.createElement("names") 
    feed.appendChild(tags_element) 
    copen = "<![CDATA][" 
    cclose = "]]>" 

    tags = db.GqlQuery("SELECT * FROM Tag ORDER BY date DESC") 

    for tag in tags: 
     tag_element = doc.createElement("name") 
     tags_element.appendChild(tag_element) 
     the_tag = doc.createTextNode("%s%s%s" % (copen,str(tag.thetag), cclose)) 
     tag_element.appendChild(the_tag) 

    self.response.headers["Content-Type"] = "application/xml" 
    self.response.out.write(doc.toprettyxml(indent=" ")) 

Je sais que c'est un problème d'encodage semble juste ne peut pas se rendre à la route du problème,

merci à l'avance

Répondre

8

Il semble que la méthode createCDATASection fonctionne pour moi.

for tag in tags: 
    tag_element = doc.createCDATASection(tag.thetag) 
    tags_element.appendChild(tag_element) 
+0

merci! – Alex

0

faire ce que vous essayez, vous devez ajouter en fait une Bloc CDATA utilisant les méthodes minidom appropriées. Ce n'est pas un problème d'encodage en soi, mais lorsque vous utilisez createTextNode, il encode les caractères de contrôle XML pour les caractères de texte réels pour vous aider, sans aucun doute.

+1

ah je vois, savez-vous comment faire avec minidom, googler ne vient pas avec quoi que ce soit parfait – Alex

0

createTextNode convertit les caractères réservés (<>&) en entités.

Questions connexes