Laden...

Bestimme Elemente aus XML-Datei auslesen

Erstellt von KevinHappy vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.051 Views
K
KevinHappy Themenstarter:in
41 Beiträge seit 2015
vor 9 Jahren
Bestimme Elemente aus XML-Datei auslesen

Hallo,

derzeit sieht mein Quelltext so aus (funktioniert leider nicht wie gewünscht):

public List<string> readOrderNumber()
        {
            List<string> orderNumber = new List<string>();
            XmlTextReader reader = new XmlTextReader(@"C:\\Users\\RadSpeyer\\Documents\\" + this.ordersResponseDataName);
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);
                        Console.WriteLine(">");

                        if (reader.Name == "AmazonOrderId")
                        {
                            orderNumber.Add(reader.Value);
                            Console.WriteLine(reader.Value);
                        }
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine(reader.Value);
                        break;
                    case XmlNodeType.EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
            return orderNumber;
        }

Hatte es aber auch schon hiermit probiert (natürlich an meine bedürfnisse angepasst):

string strFilename = "Data.xml";
XmlDocument doc = new XmlDocument();
doc.Load(strFilename);
 
XmlNode xnWasabi = doc.SelectSingleNode("/Movies/Movie[@Title='Wasabi']");
if (xnWasabi != null)
    xnWasabi.Attributes["Title"].InnerText = "Testitesti";
doc.Save(strFilename);

Das 2. Code-Schnipsel ist ja genau das was ich gesucht habe. Nur wie bekomme ich eine Schleife hin, die mir die ganzen Elemente ausliest?

Beispiel XML-Datei von Amazon und die Werte sind einfach kopiert. Ich will von jedem Order-Element die AmazonOrderId in meine List schreiben.

<?xml version="1.0"?>
  <ListOrdersResponse xmlns="https://mws.amazonservices.com/
  Orders/2013-09-01">
    <ListOrdersResult>
      <NextToken>2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=</NextToken>
      <LastUpdatedBefore>2013-09-25T18%3A10%3A21.687Z</LastUpdatedBefore>
      <Orders>
        <Order>
          <AmazonOrderId>902-3159896-1390916</AmazonOrderId>
          <ShipmentServiceLevelCategory>Standard
          </ShipmentServiceLevelCategory>
          <ShipServiceLevel>Std JP Kanto8</ShipServiceLevel>
          <EarliestShipDate>2013-08-20T19:51:16Z</EarliestShipDate>
          <LatestShipDate>2013-08-25T19:49:35Z</LatestShipDate>	
          <MarketplaceId>A1VC38T7YXB528</MarketplaceId>
          <SalesChannel>Amazon.com</SalesChannel>
          <OrderType>Preorder</OrderType>
          <BuyerEmail>5vlhEXAMPLEh9h5@marketplace.amazon.com</BuyerEmail>
          <FulfillmentChannel>MFN</FulfillmentChannel>
          <OrderStatus>Pending</OrderStatus>
          <BuyerName>John Jones</BuyerName>	
          <LastUpdateDate>2013-08-20T19:49:35Z</LastUpdateDate>
          <PurchaseDate>2013-08-20T19:49:35Z</PurchaseDate>
          <NumberOfItemsShipped>0</NumberOfItemsShipped>
          <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
          <PaymentMethod>Other</PaymentMethod>
          <IsBusinessOrder>true</IsBusinessOrder>
          <PurchaseOrderNumber>PO12345678</PurchaseOrderNumber> 
        </Order>
        <Order>
          <AmazonOrderId>902-3159896-1390916</AmazonOrderId>
          <ShipmentServiceLevelCategory>Standard
          </ShipmentServiceLevelCategory>
          <ShipServiceLevel>Std JP Kanto8</ShipServiceLevel>
          <EarliestShipDate>2013-08-20T19:51:16Z</EarliestShipDate>
          <LatestShipDate>2013-08-25T19:49:35Z</LatestShipDate>	
          <MarketplaceId>A1VC38T7YXB528</MarketplaceId>
          <SalesChannel>Amazon.com</SalesChannel>
          <OrderType>Preorder</OrderType>
          <BuyerEmail>5vlhEXAMPLEh9h5@marketplace.amazon.com</BuyerEmail>
          <FulfillmentChannel>MFN</FulfillmentChannel>
          <OrderStatus>Pending</OrderStatus>
          <BuyerName>John Jones</BuyerName>	
          <LastUpdateDate>2013-08-20T19:49:35Z</LastUpdateDate>
          <PurchaseDate>2013-08-20T19:49:35Z</PurchaseDate>
          <NumberOfItemsShipped>0</NumberOfItemsShipped>
          <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
          <PaymentMethod>Other</PaymentMethod>
          <IsBusinessOrder>true</IsBusinessOrder>
          <PurchaseOrderNumber>PO12345678</PurchaseOrderNumber> 
        </Order>
        <Order>
          <AmazonOrderId>902-3159896-1390916</AmazonOrderId>
          <ShipmentServiceLevelCategory>Standard
          </ShipmentServiceLevelCategory>
          <ShipServiceLevel>Std JP Kanto8</ShipServiceLevel>
          <EarliestShipDate>2013-08-20T19:51:16Z</EarliestShipDate>
          <LatestShipDate>2013-08-25T19:49:35Z</LatestShipDate>	
          <MarketplaceId>A1VC38T7YXB528</MarketplaceId>
          <SalesChannel>Amazon.com</SalesChannel>
          <OrderType>Preorder</OrderType>
          <BuyerEmail>5vlhEXAMPLEh9h5@marketplace.amazon.com</BuyerEmail>
          <FulfillmentChannel>MFN</FulfillmentChannel>
          <OrderStatus>Pending</OrderStatus>
          <BuyerName>John Jones</BuyerName>	
          <LastUpdateDate>2013-08-20T19:49:35Z</LastUpdateDate>
          <PurchaseDate>2013-08-20T19:49:35Z</PurchaseDate>
          <NumberOfItemsShipped>0</NumberOfItemsShipped>
          <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
          <PaymentMethod>Other</PaymentMethod>
          <IsBusinessOrder>true</IsBusinessOrder>
          <PurchaseOrderNumber>PO12345678</PurchaseOrderNumber> 
        </Order>
        <Order>
          <AmazonOrderId>902-3159896-1390916</AmazonOrderId>
          <ShipmentServiceLevelCategory>Standard
          </ShipmentServiceLevelCategory>
          <ShipServiceLevel>Std JP Kanto8</ShipServiceLevel>
          <EarliestShipDate>2013-08-20T19:51:16Z</EarliestShipDate>
          <LatestShipDate>2013-08-25T19:49:35Z</LatestShipDate>	
          <MarketplaceId>A1VC38T7YXB528</MarketplaceId>
          <SalesChannel>Amazon.com</SalesChannel>
          <OrderType>Preorder</OrderType>
          <BuyerEmail>5vlhEXAMPLEh9h5@marketplace.amazon.com</BuyerEmail>
          <FulfillmentChannel>MFN</FulfillmentChannel>
          <OrderStatus>Pending</OrderStatus>
          <BuyerName>John Jones</BuyerName>	
          <LastUpdateDate>2013-08-20T19:49:35Z</LastUpdateDate>
          <PurchaseDate>2013-08-20T19:49:35Z</PurchaseDate>
          <NumberOfItemsShipped>0</NumberOfItemsShipped>
          <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
          <PaymentMethod>Other</PaymentMethod>
          <IsBusinessOrder>true</IsBusinessOrder>
          <PurchaseOrderNumber>PO12345678</PurchaseOrderNumber> 
        </Order>
      </Orders>
    </ListOrdersResult>
    <ResponseMetadata>
      <RequestId>88faca76-b600-46d2-b53c-0c8c4533e43a</RequestId>
    </ResponseMetadata>
  </ListOrdersResponse>

--
Vielen Dank

LG
Kevin

16.842 Beiträge seit 2008
vor 9 Jahren

Da Du wohl neu im Bereich C# und XML ist, aber Dich damit beschäftigen musst, wäre es für Dich sehr ratsam, dass Du Dir die Grundlagen aneignest.
Übersicht über LINQ to XML

Letzten Endes wird Dich ein ordentliches Tutorial schneller und effizienter zu Deinem Ziel bringen, als wenn Du (wirklich einfache) Grundlagenthemen zu XML im Forum erfragst.
Du wirst hier sicherlich Hilfe bekommen, aber diese hat ja auch immer ein gewisses Delay.

Nimm also hoffentlich den Rat an, mach so ein Toturial durch und Du wirst eben viel schneller und mit weniger Aufwand und das auch noch mit einer höheren Qualität zu Deinem Ziel kommen, als wenn Du Code kopierst und den eigentlich gar nicht verstehst.

K
KevinHappy Themenstarter:in
41 Beiträge seit 2015
vor 9 Jahren

Nachdem ich mir das Zeug reingezogen habe und die Grundzüge verstanden habe, stehe ich gerade richtig auf dem Schlauch.

Ich bekomme hierbei nichts angezeigt:

public List<string> readOrderNumber()
        {
            List<string> orderNumber = new List<string>();
            try 
            {
                XElement root = XElement.Load(@"C:\\Users\\RadSpeyer\\Documents\\" + this.ordersResponseDataName);
                IEnumerable<XElement> orders = root.Descendants("Orders");
                foreach (XElement order in orders)
                {
                    Console.WriteLine(order.Element("AmazonOrderId").Value);
                }
            }
            catch (Exception ex)
            {
                // Exception properties are important for diagnostics.
                Console.WriteLine("Exception:");
                Console.WriteLine("Message: " + ex.Message);
                throw ex;
            }
            return orderNumber;
        }

Die XML-Datei ist die selbe wie oben.

--
Vielen Dank

LG
Kevin