Seite 1 von 1

Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 09:54
von Steffo
Hallo,
ich versuche mich gerade an einem einfachen Beispiel: Ich will lediglich den Wert eines Attributes eines bestimmten Tags auslesen:

Code: Alles auswählen

import xml.etree.ElementTree as ET

def main():
    tree = ET.parse('Dcm.xdm')

    for elem in tree.findall(".//lst[@name='DcmDspDid']", 'http://www.tresos.de/_projects/DataModel2/06/data.xsd'):
        name = elem.get('name')
        print name
Das Element ist irgendein Kindlement mit Namensraum:

Code: Alles auswählen

<d:lst name="DcmDspDid" type="MAP">...
Der Namensraum wurde am Anfang des Dokuments auch angegeben:

Code: Alles auswählen

xmlns:d="http://www.tresos.de/_projects/DataModel2/06/data.xsd"
Leider wird jedoch gar nichts ausgegeben. Weiß jemand weiter?

Danke im Voraus!

L. G.
Steffo

Re: Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 10:11
von BlackJack
@Steffo: Das zweite Argument von `findall()` muss eine Abbildung von Name auf Namensraum sein und diesen Namen musst Du in der Suche auch verwenden.

Code: Alles auswählen

    for elememt in tree.findall(
        ".//ns:lst[@name='DcmDspDid']",
        {'ns': 'http://www.tresos.de/_projects/DataModel2/06/data.xsd'}
    ):
        name = elememt.get('name')
        print name

Re: Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 10:14
von Steffo
Super, danke!!! :D

Re: [SOLVED]Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 11:30
von Steffo
Hallo,
gibt es eine Möglichkeit, dass das gespeicherte XML schön eingerückt wird?
So eine Art toprettyxml() für Element(Tree).

Danke im Voraus!

L. G.
Steffo

Re: [SOLVED]Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 12:19
von EyDu
Die lxml-Variante von ElementTree.write hat einen pretty_print-Parameter, ich bin mir nicht sicher, wie es beim xml-Modul aussieht.

Es ist hier übrigens nicht üblich, dass Themen als gelöst markiert werden. Ganz schlecht ist es natürlich, wenn ein Thema als gelöst markiert wird und dann trotzdem noch eine Frage folgt. Eine gute Möglichkeit, um sich sich mögliche Antwortgeber vom Hals zu halten ;-)

Re: [SOLVED]Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 13:33
von Steffo
OK, danke. :)

Re: [SOLVED]Frage zur XML-Verarbeitung

Verfasst: Dienstag 27. November 2012, 14:53
von Sirius3

Code: Alles auswählen

def ETindent(elem, level=0):
    i = "\n" + level*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for el in elem:
            ETindent(el, level+1)
        if not el.tail or not el.tail.strip():
            el.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i
    return elem

pretty_element = ETindent(element)