Python Verschachteltes Child in Element finden

Crys

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.653
Hallo miteinander,

ich suche tief verschachtelte Children in einem XML Element:
XML:
<blaBla>
    <blaBla2>
    </blaBla2>
    <Objekt>
        <blaBla3>
            <blaBla4>
                <blaBla5>
                    <blaBla6>
                        <Name>NameEins</Name>
                    </blaBla6>
                </blaBla5>
            </blaBla4>
        </blaBla3>
        <blaBla7>
            <blaBla8>
                <blaBla9>
                    <blaBla10>
                        <blaBla11>
                            <xyz:NameZwei>NameZwei</xyz:NameZwei>
                            <xyz:NameDrei>NameDrei</xyz:NameDrei>
                        </blaBla11>
                    </blaBla10>
                </blaBla9>
            </blaBla8>
        </blaBla7>
    </Objekt>
</blaBla>
Das Element heißt immer "Objekt" und die Kinder heißen immer "Name", "xyz:NameZwei" und "xyz:NameDrei".
Es gibt vor und nach dem Objekt mehrere "blaBla" Element, die ohne belang sind, sowie mehrere Parent-Elemente vor den Children, die eine unbestimmte Anzahl haben.

Zweck ist es diese XML in eine CSV zu konvertieren, mit je Spalte den drei Children.

Ich habe mit Pythons ElementTree herumexperimentiert, aber ohne Erfolg. Gerne auch eine andere Skriptsprache, das OS ist Linux.
Die Quelldatei ist sehr groß (ca. 14T Objekte) deshlab wollte ich das Skript einfach halten.

Ich wäre über eine konkrette Lösung sowie über konkrette Hinweise, für einen Python Laien, dankbar!
 
Ja? ...

Ich scheitere gerade daran XQuery in irgendeiner Form überhaupt ausführen zu können.

Und bei XSLT stellt sich bei mir die identische Frage: wie finde ich ein Child in einem Element, ohne das ich weiß in was für weitere Elemente dieses verpackt ist?
 
Crys schrieb:
Ich scheitere gerade daran XQuery in irgendeiner Form überhaupt ausführen zu können.
Unnötig, wenn du XSLT nutzt, da (quasi) direkt in XSLT integriert.

Crys schrieb:
Und bei XSLT stellt sich bei mir die identische Frage: wie finde ich ein Child in einem Element, ohne das ich weiß in was für weitere Elemente dieses verpackt ist?
Mit XPath (Teil von XQuery).
Ich habe dir ein Tutorial verlinkt, welches dir das alles erklärt. Gibt auch noch viele weitere dazu.
 
Da ich mich damit am ehesten auskenne (aber auch nicht wirklich) hätte ich es mit beautifulsoup und dem lxml parser versucht. Muss man sich aber auch erstmal einlesen.
 
Da sich wohl niemand die Mühe gemacht hat mein Beispiel mal anzuschauen werfe ich noch was in die Runde:
XML-Verarbeitungsfehler: Präfix nicht an einen Namespace gebunden Adresse
Das "xyz:NameZwei" wird wohl vom XDingsbums nicht akzeptiert. Ohne diesen Doppelpunkt Prefix komme ich weiter.
 
Ich habs mir jetzt mal schnell angeschaut. Das printet die NameEins,... mal aus:

Python:
from bs4 import BeautifulSoup as bs


with open('test.xml') as xf:
    soup = bs(xf, 'lxml')

obj = soup.find('objekt')
n = obj.find('name')
n2 = obj.find('xyz:namezwei')
n3 = obj.find('xyz:namedrei')

print(n.string)
print(n2.string)
print(n3.string)

Beachte aber, dass BeautifulSoup alle Tags klein macht, weil es eher auf HTML ausgelegt ist, wo das wohl in den Spezifikationen drin steht.
 
Zurück
Oben