Ich habe gerade mit dem Erlernen von SAX/Stream- und DOM-Ansätzen zum Parsen und Verarbeiten von XML-Dateien begonnen. Mein Szenario wäre, dass ich Informationen von einer gegebenen XML-Datei, die von einem FTP-Server gehosted wurde, in separate Array-Listen verarbeite, bevor ich die Listen in meinen DBManager übertrage, um sie in eine Datenbank einzufügen. Aber bevor ich es in die Datenbank aufnehmen möchte, möchte ich, dass der Benutzer die "Check-Schaltfläche" drückt, um sicherzustellen, dass die Informationen tatsächlich korrekt sind, bevor "zur Datenbank hinzugefügt" wird. Aber das löst irgendwie eine FormatException aus. Ich sehe keine "DateTime" in irgendeiner meiner Klassen oder Variablen, was mich noch weiter verwirrt.C# FormatException wurde bei der Verarbeitung von XML über DOM-Ansatz nicht behandelt
EDIT 1: Dank Abdo Hussein, wurde mir klar, das Problem im Screenshot angegeben war, dass ich Knoten, nicht Knoten2 wurde mit. Das gleiche Problem gilt jedoch für die folgende Zeile und möglicherweise auch für die folgende Zeile. Obwohl sie immer noch innerhalb der gleichen Schleife sind wie Knoten und nicht node2.
invoice.ShippingCharges = Convert.ToDecimal(node.ChildNodes[4].InnerText);
invoice.InvoiceTotal = Convert.ToDecimal(node.ChildNodes[5].InnerText);
Dies ist der Pastebin-Code für diese besondere Klasse, da es zu lang und chaotisch (ich weiß, ich es für später verlassen werde, muss ich zu überholen diese erste) http://pastebin.com/FewCm23W
Im Folgenden wird die XML, die ich arbeite:
<?xml version="1.0" encoding="utf-8" ?>
<Invoices>
<Invoice ID="I001">
<InvoiceDate>21/06/2016</InvoiceDate>
<SellerID>Supp001</SellerID>
<BuyerID>WCS1810</BuyerID>
<OrderID>Order001</OrderID>
<InvoiceItem>
<Product ID="R001">
<ProductName>8GB RAM King</ProductName>
<Description>RAM</Description>
<Capacity>8GB</Capacity>
<Quantity>2</Quantity>
<UnitPrice>100</UnitPrice>
</Product>
</InvoiceItem>
<ShippingCharges>5</ShippingCharges>
<InvoiceTotal>205</InvoiceTotal>
</Invoice>
</Invoices>
Dies sind die Klassen für die verschiedenen Arten von Informationen gespeichert werden:
Invoice.cs
class Invoice
{
public string InvoiceID { get; set; }
public string InvoiceDate { get; set; }
public string OrderID { get; set; }
public string SellerID { get; set; }
public decimal ItemsTotalPrice { get; set; }
public decimal ShippingCharges { get; set; }
//shippin charges + itemsTotalPrice
public decimal InvoiceTotal { get; set; }
}
InvoiceItem
class InvoiceItem
{
public string InvoiceID { get; set; }
public string ProductID { get; set; }
public string Description { get; set; }
public string Capacity { get; set; }
public int Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal TotalPrice { get; set; }
}
Sorgfältig angeben, welche foreach? – Kei
Weil ich in der Lage sein soll, den in node2 genommenen Wert zu berechnen und ihn im Knoten – Kei
Aaah zu speichern, nachdem ich eine Pause gemacht habe und an etwas anderem gearbeitet habe und zurück gekommen bin, habe ich gesehen, wo der node2 dumme Fehler ist. Aber das Problem ist, dass für diese Zeilen: invoice.ShippingCharges = Convert.ToDecimal (node.ChildNodes [4] .InnerText); invoiceTotal = Convert.ToDecimal (node.ChildNodes [5] .InnerText); das Problem besteht fort – Kei