Python XML Parsing

OP #3816294
Hallo,

ich versuche aktuell mit Python ein Programm zu erstellen, das mir die 
Struktur eines XML Files dynamisch ausliest und als Dictionary 
wiedergibt.

Das Dictionary soll nach einlesen des folgenden XML-File-Beispiel so 
aussehen:

root
 |Items
 |   Item
 |     ...
 |   Item
 |     ...
 |Address
 |    Country
 |    ...
 |Address
 |    Country
 |    ...
 |DeliveryNotes

Mein Problem ist, dass ich nicht weiß, wie man mit den doppelt 
vorhandenen Namen umgehen soll (z.B. Item oder Address)



<?xml version="1.0"?>
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
  <Address Type="Shipping">
    <Name>Ellen Adams</Name>
    <Street>123 Maple Street</Street>
    <City>Mill Valley</City>
    <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </Address>
  <Address Type="Billing">
    <Name>Tai Yee</Name>
    <Street>8 Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
  </Address>
  <DeliveryNotes>Please leave packages in shed by 
driveway.</DeliveryNotes>
  <Items>
    <Item PartNumber="872-AA">
      <ProductName>Lawnmower</ProductName>
      <Quantity>1</Quantity>
      <USPrice>148.95</USPrice>
      <Comment>Confirm this is electric</Comment>
    </Item>
    <Item PartNumber="926-AA">
      <ProductName>Baby Monitor</ProductName>
      <Quantity>2</Quantity>
      <USPrice>39.98</USPrice>
      <ShipDate>1999-05-21</ShipDate>
    </Item>
  </Items>
</PurchaseOrder>


Hier in dieser Funktion wird zum Beispiel das Element "Address" nur 
einmal auflistet, vermutlich weil actDict['Address'] einmal 
überschrieben wird.


def search(actNode, actDict):
    nodes = actNode.getchildren()
    for node in nodes:
        actDict[node.tag] = node.text

    return actDict

>>>
{'Items': '\n    ', 'DeliveryNotes': 'Please leave packages in shed by 
driveway.', 'Address': '\n    '}



Kennt ihr vielleicht eine Methode um dies zu umgehen? Mir ist bewusst 
dass ein Dicitonary nicht zwei gleiche Einträge haben kann, aber 
irgendwie muss man das XML File doch in einem Dicitonary abbilden 
können(?)

Ich bin für jeden Tipp dankbar :-)

Gruß
Ich weiß, die Antwort ist blöd, aber: Warum willst du das machen? Es 
gibt haufenweise, wirklich haufenweise, Bibliotheken die XML in jeder 
nur denkbaren Form zugreifbar machen. Und diese Art von 
XML-Repräsentierung, die du dir da vorstellst, ist zudem noch 
unglaublich langsam und ressourcenfressend. Bist du sicher, dass du dein 
Problem nicht einfacher mit der vorhandenen API von zum Beispiel lxml 
lösen kannst?

Grüße,
Sven
Gast
Den "Pfad" als eindeutigen String fuer den Listenindex bzw. Dict nutzen?
Tags und Struktur weiter abstrahieren in nodes mit attributen - wie lxml 
es macht...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.