Python xml zu csv

Bitte lesen Sie die ganze Frage, bevor Sie das Duplikat markieren.
Ich habe eine verschachtelte XML-Datei, die ich in eine csv-Datei konvertieren möchte. Ich muss ein Python-Skript für das gleiche schreiben.

Die XML-Datei lautet:

<?xml version="1.0"?> <ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01"> <ListOrdersResult> <Orders> <Order> <LatestShipDate>2015-06-02T18:29:59Z</LatestShipDate> <OrderType>StandardOrder</OrderType> <PurchaseDate>2015-05-31T03:58:30Z</PurchaseDate> <AmazonOrderId>171-6355256-9594715</AmazonOrderId> <LastUpdateDate>2015-06-01T04:18:58Z</LastUpdateDate> <ShipServiceLevel>IN Std Domestic</ShipServiceLevel> <NumberOfItemsShipped>0</NumberOfItemsShipped> <OrderStatus>Canceled</OrderStatus> <SalesChannel>Amazon.in</SalesChannel> <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped> <IsPremiumOrder>false</IsPremiumOrder> <EarliestShipDate>2015-05-31T18:30:00Z</EarliestShipDate> <MarketplaceId>A21TJRUUN4KGV</MarketplaceId> <FulfillmentChannel>MFN</FulfillmentChannel> <IsPrime>false</IsPrime> <ShipmentServiceLevelCategory>Standard</ShipmentServiceLevelCategory> </Order> <Order> <LatestShipDate>2015-06-02T18:29:59Z</LatestShipDate> <OrderType>StandardOrder</OrderType> <PurchaseDate>2015-05-31T04:50:07Z</PurchaseDate> <BuyerEmail>dr7h1rhy6457rng@marketplace.amazon.in</BuyerEmail> <AmazonOrderId>403-5551715-2566754</AmazonOrderId> <LastUpdateDate>2015-06-01T07:52:49Z</LastUpdateDate> <ShipServiceLevel>IN Exp Dom 2</ShipServiceLevel> <NumberOfItemsShipped>2</NumberOfItemsShipped> <OrderStatus>Shipped</OrderStatus> <SalesChannel>Amazon.in</SalesChannel> <ShippedByAmazonTFM>false</ShippedByAmazonTFM> <LatestDeliveryDate>2015-06-06T18:29:59Z</LatestDeliveryDate> <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped> <BuyerName>Ajit Nair</BuyerName> <EarliestDeliveryDate>2015-06-02T18:30:00Z</EarliestDeliveryDate> <OrderTotal> <CurrencyCode>INR</CurrencyCode> <Amount>938.00</Amount> </OrderTotal> <IsPremiumOrder>false</IsPremiumOrder> <EarliestShipDate>2015-05-31T18:30:00Z</EarliestShipDate> <MarketplaceId>A21TJRUUN4KGV</MarketplaceId> <FulfillmentChannel>MFN</FulfillmentChannel> <TFMShipmentStatus>Delivered</TFMShipmentStatus> <PaymentMethod>Other</PaymentMethod> <ShippingAddress> <StateOrRegion>MAHARASHTRA</StateOrRegion> <City>THANE</City> <Phone>9769994355</Phone> <CountryCode>IN</CountryCode> <PostalCode>400709</PostalCode> <Name>Ajit Nair</Name> <AddressLine1>C-25 / con-7 / Chandralok CHS</AddressLine1> <AddressLine2>Sector-10 ,Koper khairne</AddressLine2> </ShippingAddress> <IsPrime>false</IsPrime> <ShipmentServiceLevelCategory>Expedited</ShipmentServiceLevelCategory> </Order> 

Ich habe versucht, Werte für meinen Code in Form einer Liste zu bekommen. Aber es druckt nichts.

Mein Code:

 from xml.etree import ElementTree with open('orders.xml', 'rb') as f: tree = ElementTree.parse(f) for node in tree.findall('.//Order'): oid = node.attrib.get('SellerOrderId') if oid: print oid 

Was ist falsch mit meinem Code?

EDIT: Temporärer Link zum Abschließen von File Orders.xml

  • Python: Wie schreibe ich ein Wörterbuch von Tupel-Werten in eine CSV-Datei?
  • Verknüpfen einer DataFrame- und Excel-Daten
  • Warum ist Numpy / Pandas Parsing einer CSV-Datei mit langen Schlangen so langsam?
  • Aufteilen einer csv-Datei in Panda-Dataframe durch mehrere Spalten
  • Python CSV Fehler: Sequenz erwartet
  • Wie kann ich das Zitieren im Python 2.4 CSV Reader deaktivieren?
  • One Solution collect form web for “Python xml zu csv”

    Ihr XML hat hier den Default-Namespace definiert:

     <ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01"> 

    Beachten Sie, dass nachgeordnete Elemente den Vorfahren-Standard-Namespace implizit erben, sofern nicht anders angegeben. Sie müssen den Namensraum + den lokalen Namen kombinieren, um einen vollständig qualifizierten Elementnamen zu bilden, zum Beispiel:

     ns = {'d': 'https://mws.amazonservices.com/Orders/2013-09-01'} for node in tree.findall('.//d:Order', ns): oid = node.attrib.get('SellerOrderId') if oid: print oid 

    Entsprechend der vollständigen XML-Datei, die Sie verknüpft haben, ist SellerOrderId ein Kind Element von Order anstelle von Attribut. In diesem Fall können Sie einfach verwenden .//d:Order/d:SellerOrderId , um sie zu bekommen und dann drucken Sie es ist Wert, wie .//d:Order/d:SellerOrderId :

     ns = {'d': 'https://mws.amazonservices.com/Orders/2013-09-01'} for node in tree.findall('.//d:Order/d:SellerOrderId', ns): print node.text 

    Ausgabe :

     171-1322776-9700344 171-4214129-7148305 402-8263846-7042737 402-7017923-9474716 402-9691237-2887553 171-4614227-7597903 403-6729903-2119563 402-2184564-2676353 171-4520392-2088330 402-7986969-8827533 
    Python ist die beste Programmiersprache der Welt.