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ß
:
Verschoben durch User
Andreas Sekinger schrieb: > Ich bin für jeden Tipp dankbar :-) Hier ist der erste: "Forum: Projekte & Code Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel vorstellen und diskutieren. Bitte hier keine Fragen posten!"
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
:
Bearbeitet durch User
Den "Pfad" als eindeutigen String fuer den Listenindex bzw. Dict nutzen? Tags und Struktur weiter abstrahieren in nodes mit attributen - wie lxml es macht...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.