pymt + xmlError

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
karllson
User
Beiträge: 3
Registriert: Freitag 8. April 2011, 02:40

Hey Leute,

ich habe ein Problem und da ich recht neu auf dem Python-Gebiet bin, versuche ich jetzt nicht noch zwei Tage damit zu verbringen eine Lösung zu finden, sondern hoffe einfach mal auf Input von "Außen".
Es geht um folgende (kleine) Funktion:

Code: Alles auswählen

def do_next():
    artists = ['Bryan Adams', 'Leona Lewis']
    posX = 100
    posY = 350
    xmlStart = ['<?xml version="1.0" encoding="UTF-8"?><MTWidget>']
    for artistName in artists:
        xmlStart.append('<MTLabel label="'+str(artistName)+'"/>')
        posX += 150
    xmlStart.append('</MTWidget>')
    for xmlCode in xmlStart:
        print "%s" %(xmlCode)
        xmlString = xmlCode
    tmpArt = XMLWidget(xml=xmlString)      
    window.add_widget(tmpArt)
    anim = Animation(duration=0.5, x=posX, y=posY, f="ease_in_bounce")  
    tmpArt.do(anim)
Egal wie ich es mache, ob mit Arrays, mit reinen Strings oder sonst welchen Lösungen, schmeißt er mir entweder einen unexpected eof-error oder einen not well formed des xml-parsers.

Das ganze mag ein Wenig wirr aussehen, weil ich jetzt schon 100 verschiedene Möglichkeiten getestet habe - ohne Erfolg.
Wie gesagt: Vieles probiert, aber immer die gleichen Ergebnisse.

Ich hoffe ihr könnt mir helfen.

Danke im schonmal im Voraus

Grüße karllson
BlackJack

@karllson: Lass Dir das XML doch mal kurz bevor Du es verwendest ausgeben. Also genau das was Du an den Namen gebunden hast, den Du dann als Argument verwendest.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und ganz ehrlich, das schreiben von XML auf die Art sieht schon relativ furchtbar aus. Ich würde lxmls XMLBuilder verwenden, der generiert immer wohlgeformtes XML.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
karllson
User
Beiträge: 3
Registriert: Freitag 8. April 2011, 02:40

Hey, danke erstmal für die schnellen Antworten.

Ausgabe hab ich schon gemacht, nur leider vergessen zu posten.

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?><MTWidget>
<MTLabel label="Bryan Adams"/>
<MTLabel label="Leona Lewis"/>
</MTWidget>

Also eigentlich ist der Code ja so wie er soll, oder? Ich habe das ganze auch schon durch nen XML Validator gejagt und außer, dass er MTLabel und MTWidget nicht kennt, ist alles in Ordnung - also auch so wie es soll. Ich verstehe das nicht...

Gruß Karllson
BlackJack

@karllson: Das ist die Ausgabe von Deinem Programm, aber da gibst Du ja nicht das aus, was Du beim Aufruf von `XMLWidget` übergibst.

Würde mich übrigens Leonidas anschliessen. Wenn `lxml` nicht installiert ist, kann man auch mit `ElementTree` aus der Standardbibliothek arbeiten. Die Struktur mit `Element` und der `makeelement()`-Methode auf `Element`\s aufzubauen ist einfach und halt auch *sicher*. Im Gegensatz zum zusammenbasteln von Zeichenketten.
deets

karllson hat geschrieben:Hey Leute,

ich habe ein Problem und da ich recht neu auf dem Python-Gebiet bin, versuche ich jetzt nicht noch zwei Tage damit zu verbringen eine Lösung zu finden, sondern hoffe einfach mal auf Input von "Außen".
Es geht um folgende (kleine) Funktion:

Code: Alles auswählen

def do_next():
    artists = ['Bryan Adams', 'Leona Lewis']
    posX = 100
    posY = 350
    xmlStart = ['<?xml version="1.0" encoding="UTF-8"?><MTWidget>']
    for artistName in artists:
        xmlStart.append('<MTLabel label="'+str(artistName)+'"/>')
        posX += 150
    xmlStart.append('</MTWidget>')
    for xmlCode in xmlStart:
        print "%s" %(xmlCode)
        xmlString = xmlCode
    tmpArt = XMLWidget(xml=xmlString)      
    window.add_widget(tmpArt)
    anim = Animation(duration=0.5, x=posX, y=posY, f="ease_in_bounce")  
    tmpArt.do(anim)
Egal wie ich es mache, ob mit Arrays, mit reinen Strings oder sonst welchen Lösungen, schmeißt er mir entweder einen unexpected eof-error oder einen not well formed des xml-parsers.

Das ganze mag ein Wenig wirr aussehen, weil ich jetzt schon 100 verschiedene Möglichkeiten getestet habe - ohne Erfolg.
Wie gesagt: Vieles probiert, aber immer die gleichen Ergebnisse.

Ich hoffe ihr könnt mir helfen.

Danke im schonmal im Voraus

Grüße karllson
Naja, ist doch ziemlich klar. Du baust das XML zwar korrekt zusammen (wenn auch auf fuerchterliche Weise, da schliesse ich mich Leonidas & Blackjack an)

Aber das Kernproblem ist, dass du deinen xmlString immer nur mit dem letzten Happen deiner Liste bestueckst.

print "%s" % string


ist kein magisches Ding, dass Strings verknuepft...

Mach doch mal das hier:

Code: Alles auswählen


xmlString = "".join(xmlStart)

print xmlString
karllson
User
Beiträge: 3
Registriert: Freitag 8. April 2011, 02:40

Danke erstmal für eure Antworten. Ich werde mich morgen/heute nochmal damit auseinandersetzen und veruschen es besser hinzubekommen. Ich bin der Meinung, dass ich die "join-Variante" auch mal probiert hatte und das auch nicht lief.

Ich denke aber, dass das Alles auf Anfängerfehler zurückzuführen ist.



Vielen Dank nochmal und gute Nacht!
Antworten