Seite 1 von 1

Problem mit etree und auslesen von XML Datei

Verfasst: Samstag 24. September 2011, 07:21
von Jurudoca
Ich bin recht neu dabei mit python und will eine XML Datei auslesen. Es geht dabei um das Auslesen/ansprechen bestimmter tags...

Meine Datei hat folgende Struktur:

Code: Alles auswählen

<sss version="1.2">
        <date>2011-09-23</date>
        <time>12:32:29</time>
        <origin>OPST</origin>
        <user></user>
        <survey>
            <name>Test</name>
            <version>2011-09-02 15:50:10</version>
            <record ident="A">
                <variable ident="10" type="quantity">
                    <name>v_682</name>
                    <label>Another question</label>
                    <position start="23" finish="24"/>
                    <values>
                        <range from="0" to="32"/>
                    </values>
                </variable>
                <variable ident="11" type="quantity">
                    <name>v_683</name>
                    <label>another totally another Question</label>
                    <position start="25" finish="26"/>
                    <values>
                        <range from="0" to="33"/>
                    </values>
                </variable>
                <variable ident="12" type="quantity">
                    <name>v_684</name>
                    <label>And once more Question</label>
                    <position start="27" finish="29"/>
                    <values>
                        <range from="0" to="122"/>
                    </values>
                </variable>
                <variable ident="20" type="single">
                    <name>v_685</name>
                    <label>Question with alternatives</label>
                    <position start="73" finish="73"/>
                    <values>
                        <range from="1" to="6"/>
                        <value code="1">Alternative 1</value>
                        <value code="2">Alternative 2</value>
                        <value code="3">Alternative 3</value>
                        <value code="6">Alternative 4</value>
                    </values>
                </variable>
            </record>
        </survey>
    </sss>
um die Elemente aus der Datei auszulesen, habe ich mir einen eher schlechten Loop entwickelt, der sicherlich hinter den Möglichkeiten der etree library zurückfällt....

Code: Alles auswählen

  from xml.etree.cElementTree import parse
    et = parse(open('scheme.xml','rb'))
    root = et.getroot()
    for i in range(4):
        a= str(root[4][2][i][0].text)
        if a.startswith('v'):
            print root[4][2][i][1].text 
Wie kann ich beispielsweise den Text innerhalb des value tags auslesen? Welche möglichkeiten für einen Loop gibt es da?

Habe mich schon in diversen Tutorials umgeschaut, aber so richtig verstanden nicht...

Viele Grüße
Jurudoca

Re: Problem mit etree und auslesen von XML Datei

Verfasst: Samstag 24. September 2011, 09:42
von sma
Z.B. so:

Code: Alles auswählen

from xml.etree import ElementTree as ET

root = ET.XML("""
...hier steht dein XML...
""")

for e in root.findall("survey/record/variable/values/value"):
    print e.text
Wenn du lxml statt der eingebauten XML-Bibliothek benutzen würdest, hättest du nicht nur ein zu ET kompatibles API, sondern könntest auch mit XPath oder JQuery-artigem CSS nach Elementen suchen. XPath ist zwar auch keine einfache Sprache, erlaubt aber sehr kompakte Ausdrücke, um eine gesuchte Knotenmenge zu beschreiben.

Stefan

Re: Problem mit etree und auslesen von XML Datei

Verfasst: Samstag 24. September 2011, 10:19
von Jurudoca
Hi Stefan,
danke Dir...das macht mich echt glücklich...diese /.../..../ habe ich noch nicht gesehen...das funktioniert echt gut...

Grüße
Jurudoca

Re: Problem mit etree und auslesen von XML Datei

Verfasst: Samstag 24. September 2011, 14:11
von ocoal
Hallo Jurudoca,

vielleicht noch hier eine kleine Alternative zu etree für Dich.

Ich habe für viele kleinere Projekte und Tools/Skripte gerne in letzter Zeit immer wieder auf die Bibliothek: zurückgegriffen.

Die Syntax/Benutzung von PyQuery ist stark an die Query-artige Suche von jQuery angelehnt. Vielleicht sagt es Dir ja zu.

Ich habe etree parsing immer als sehr unschön empfunden. Mit PyQuery habe ich inzwischen wieder Spass am XML parsen gefunden ;).

Viele Grüße,

-Colin-

Re: Problem mit etree und auslesen von XML Datei

Verfasst: Samstag 24. September 2011, 16:39
von sma
Das von mir schon zuvor erwähnte lxml kann mit cssselect vieles von pyquery von Haus aus: http://lxml.de/cssselect.html Ein Blick auf XPath lohnt aber auch. Umständlicher, dafür ein Standard und das Wissen kann man auch zu anderen Sprachen tragen. Andererseits, JQuery ist ja inzwischen auch eine Art von Standard geworden.

Stefan

Re: Problem mit etree und auslesen von XML Datei

Verfasst: Mittwoch 28. September 2011, 09:59
von Jurudoca
@ ocoal: danke für den Hinweis. Das klingt auch interessant. Habe es erst mal mit lxml gemacht...aber PyQuery sieht irgendwie klarer aus...