2009-10-20 8 views
0

Je suis en train d'encoder, donc c'est probablement simple, mais je suis coincé. J'essaie d'analyser un fichier XML envoyé par courrier électronique à la nouvelle fonction de réception de courrier électronique de App Engine. Tout d'abord, je viens de coller le code XML dans le corps du message, et il a très bien analysé CElementTree. Ensuite, je l'ai changé à l'aide d'une pièce jointe, et l'analyse avec cElementTree produit cette erreur:Problème d'encodage invalide cElementTree

SyntaxError: not well-formed (invalid token): line 3, column 10

J'ai sortie XML à la fois envoi par courrier électronique dans le corps et comme une pièce jointe, et ils regardent la même chose pour moi. Je suppose que le coller dans la boîte est en train de changer l'encodage d'une manière qui n'attache pas le fichier, mais je ne sais pas comment le réparer.

Les premières lignes regarder ceci:

<?xml version="1.0" standalone="yes"?> 
<gpx xmlns="http://www.topografix.com/GPX/1/0" version="1.0" creator="TopoFusion 2.85" xmlns:TopoFusion="http://www.TopoFusion.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.TopoFusion.com http://www.TopoFusion.com/topofusion.xsd"> 
<name><![CDATA[Pacific Crest Trail section K hike 4]]></name><desc><![CDATA[Pacific Crest Trail section K hike 4. Five Lakes to Old Highway 40 near Donner. As described in Day Hikes on the PCT California edition by George & Patricia Semb. See pages 150-152 for access and exit trailheads. GPS data provided by the USFS]]></desc><author><![CDATA[MikeOnTheTrail]]></author><email><![CDATA[[email protected]]]></email><url><![CDATA[http://www.pcta.org]]></url> 
<urlname><![CDATA[Pacific Crest Trail Association Homepage]]></urlname> 
<time>2006-07-08T02:16:05Z</time> 

Edité pour ajouter plus d'informations:

J'ai un fichier qui est GPX quelques milliers de lignes. Si je le coller dans le corps du message que je peux analyser correctement, comme ceci:

gpxcontent = message.bodies(content_type='text/plain') 
for x in gpxcontent: 
    gpxcontent = x[1].decode() 
for event, elem in ET.iterparse(StringIO.StringIO(gpxcontent), events=("start", "start-ns")): 

Si je le joindre au courrier en tant que pièce jointe, en utilisant Gmail. Et puis l'extraire comme suit:

if isinstance(message.attachments, tuple): 
     attachments = [message.attachments] 
     gpxcontent = attachments[0][3].decode() 
     for event, elem in ET.iterparse(StringIO.StringIO(gpxcontent), events=("start", "start-ns")): 

Je reçois l'erreur ci-dessus. La ligne 3 colonne 10 semble être le début de! [CDATA sur la troisième ligne.

+1

S'il vous plaît nous donner plus de données. L'échantillon que vous avez fourni a été analysé avec succès par mon cElementTree après l'avoir ajouté. –

+0

Vous dites qu'il y a un problème d'encodage, mais le message d'erreur n'est pas bien formé (jeton invalide), ce qui n'a rien à voir avec l'encodage. Veuillez préciser «J'ai changé pour utiliser une pièce jointe» - que transmettez-vous exactement à cElementTree, et comment? Afficher le code Que se passe-t-il exactement à la «ligne 3, colonne 10»? –

Répondre

Questions connexes