libxml2?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

Hi,

zuerst: Ich bin noch relativ neu bei Python, sorry, wenn ich irgendwas falsch mache.

Ich habe in einer XML-Datei folgendes:

Code: Alles auswählen

<irgendwasaussenrum>
    <objekt>
        <name>Objekt1</name>
        <eigenschaft>irgendwas</eigenschaft>
    </objekt>
    <objekt>
        <name>Objekt2</name>
        <eigenschaft>nochwas</eigenschaft>
    </objekt>
</irgendwasaussenrum>
jetzt möchte ich das so umwandeln:

Code: Alles auswählen

[{"name":"Objekt1", "eigenschaft":"irgendwas"}, {"name":"Objekt2", "eigenschaft":"nochwas"}]
könnt ihr mir bitte erklären, wie ich das schaffe? Ich durchsuche jetzt schon ewig irgendwelche englischen Anleitungen, aber ich kriegs nicht hin.

Danke für eure Bemühungen im Vorraus schonmal,

BeeWee
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Hiho beewee:

Code: Alles auswählen

from xml.dom.minidom import parseString

def parseThis(doc):
    def getTagValue(node, name):
        return node.getElementsByTagName(name)[0].firstChild.nodeValue
    for node in doc.getElementsByTagName('objekt'):
        yield {
            'name': getTagValue(node, 'name'),
            'eigenschaft': getTagValue(node, 'eigenschaft')
        }

if __name__ == '__main__':
    doc = """
    <irgendwasaussenrum>
        <objekt>
            <name>Objekt1</name>
            <eigenschaft>irgendwas</eigenschaft>
        </objekt>
        <objekt>
            <name>Objekt2</name>
            <eigenschaft>nochwas</eigenschaft>
        </objekt>
    </irgendwasaussenrum> 
    """
    
    for line in parseThis(parseString(doc)):
        print line
Hoffe das hilft.

Ausgabe:

Code: Alles auswählen

{'eigenschaft': u'irgendwas', 'name': u'Objekt1'}
{'eigenschaft': u'nochwas', 'name': u'Objekt2'}
TUFKAB – the user formerly known as blackbird
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

man, blackbeard, du bist ja überall ;-)

Dein Code funktioniert perfekt, dankeschön (-;

Grüße

BeeWee
dejot
User
Beiträge: 16
Registriert: Mittwoch 2. November 2005, 17:36
Wohnort: Werne
Kontaktdaten:

interessant. woher weiß man sowas wie das "from xml.dom.minidom import parseString"?

@beewee: heißt er nicht blackbird? schwarzer vogel, nicht schwarzer bart *g*
Gast

lol, ist hier halb ubuntuusers versammelt :D
@beewee: heißt er nicht blackbird? schwarzer vogel, nicht schwarzer bart *g*
^^
dass ich das falsch geschrieben hab, liegt daran, dass ich in einem Browsergame mal jemanden kannte, der Blackbeard hieß. Aber "Schwarzer Bart" ist doch auch schön ;-)

BeeWee
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

dejot hat geschrieben:interessant. woher weiß man sowas wie das "from xml.dom.minidom import parseString"?
Hieraus?
http://docs.python.org/lib/module-xml.dom.minidom.html
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

dejot hat geschrieben:interessant. woher weiß man sowas wie das "from xml.dom.minidom import parseString"?
In der Regel weiß man, was man in etwa tun will. Also ich wollte in etwas was mit XML machen. Also findet man in der Modulliste auf docs.python.org ein nettes xml modul. Und weils da so viele Parser gibt hab ich einfach den minidom Parser genommen. der Ist nämlich mit Abstand der einfachste und eine 1:1 Umsetzung vom w3c Standard.
TUFKAB – the user formerly known as blackbird
Antworten