Python XML Parsing

OP #3816294
Lesenswert?

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ß
#3816331
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren