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.
hallo, ich wollt mir ein kleinen XML parser für meine daten basteln und hab mich für ElementTree entschieden weils leichter scheint als die anderen. Ich hab folgende Struktur
Wenn Du das XML an `ElementTree` übergeben hast, dann ist das Parsen doch schon erledigt. Du bekommst einen Baum aus `Element`-Objekten zurück, die Du traversieren kannst. Der Wurzelknoten enthält zum Beispiel die beiden `genre`-Elemente. Mit `find()` bzw. `findall()` kannst man eine -- leider ziemlich kleine -- Untermenge von XPath benutzen um Knoten im Baum zu finden.
In [44]: doc = etree.fromstring(source)
In [45]: for node in doc:
....: print node.tag, node.get('type')
....:
genre audio
genre video
In [46]: doc.getchildren()
Out[46]: [<Element genre at -4870cd34>, <Element genre at -4870c9d4>]
In [47]: for node in doc.findall('.//index'):
....: print node.tag, node.get('name')
....:
index Hip-Hop
index Rock
index Punk
index Action
BlackJack hat geschrieben:Wenn Du das XML an `ElementTree` übergeben hast, dann ist das Parsen doch schon erledigt. Du bekommst einen Baum aus `Element`-Objekten zurück, die Du traversieren kannst. Der Wurzelknoten enthält zum Beispiel die beiden `genre`-Elemente. Mit `find()` bzw. `findall()` kannst man eine -- leider ziemlich kleine -- Untermenge von XPath benutzen um Knoten im Baum zu finden.
In [44]: doc = etree.fromstring(source)
In [45]: for node in doc:
....: print node.tag, node.get('type')
....:
genre audio
genre video
In [46]: doc.getchildren()
Out[46]: [<Element genre at -4870cd34>, <Element genre at -4870c9d4>]
In [47]: for node in doc.findall('.//index'):
....: print node.tag, node.get('name')
....:
index Hip-Hop
index Rock
index Punk
index Action
okay danke, soweit kann ich noch folgen - aber ich versteh das mit dem SubElement nicht ganz.. wenn ich versuch bei "<artist>" mit SubElement die Elemente rauszubekommen gibt er immer 0 aus, aber "<name>" is doch ein SubElement von "<artist>" ?
blan hat geschrieben:okay danke, soweit kann ich noch folgen - aber ich versteh das mit dem SubElement nicht ganz.. wenn ich versuch bei "<artist>" mit SubElement die Elemente rauszubekommen gibt er immer 0 aus, aber "<name>" is doch ein SubElement von "<artist>" ?
`SubElement()` *erzeugt* neue Elemente. Da Du kein '<artist>' anlegst, kann auch keins da sein.
In [4]: doc = etree.fromstring('<root />')
In [5]: a = etree.SubElement(doc, 'viking', name='eric')
In [6]: etree.dump(doc)
<root><viking name="eric" /></root>
In [7]: a
Out[7]: <Element viking at -486b9554>