我刚刚开始学习SAX / Stream以及用于解析和处理XML文件的DOM方法。我的情况是我正在处理从我托管的FTP服务器检索到的给定XML文件中的信息,在将列表传递到我的DBManager之前将其放入单独的Array-lists中以将它们添加到数据库中。但是,在我想将它添加到数据库之前,我希望用户按下"检查按钮"在添加到数据库"之前确保信息确实正确。但这会以某种方式触发FormatException。我没有看到任何" DateTime"在我的任何类或变量使用中,这使我更加困惑。
编辑1:感谢Abdo Hussein,我意识到截图中说明的问题是我使用的是节点,而不是 node2 。但是,同样的问题也适用于以下行,也可能是后面的行。虽然它们仍然与节点处于同一循环中,而不是 node2 。
invoice.ShippingCharges = Convert.ToDecimal(node.ChildNodes[4].InnerText);
invoice.InvoiceTotal = Convert.ToDecimal(node.ChildNodes[5].InnerText);
这是这个特定类的pastebin代码,因为它太长而且很混乱(我知道,我以后会把它留下来,我需要先通过它)http://pastebin.com/FewCm23W
以下是我正在处理的XML:
<?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>
这些是要存储的不同类型信息的类:
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; }
}
答案 0 :(得分:1)
DateTime只是一个疑难解答提示,并不意味着你有一个DateTime格式例外。
您在foreach中使用的是 node 变量,而不是 node2 ,请查看此内容。
请注意: -
1- FormatException:value不是有效格式的数字。
https://msdn.microsoft.com/en-us/library/9k6z9cdw(v=vs.110).aspx
2-检查您的CultureInfo,因为格式不同取决于不同的&#34; CultureInfo&#34; s
答案 1 :(得分:1)
啊,我现在明白了。
问题是我正在转换的每个十进制变量的node2节点intead。
_kernel = new StandardKernel(
new NinjectSettings{LoadExtensions = true},
new FuncModule(),
new DynamicProxyModule()); // <~ this is what fixed it
问题2-我不知道整个foreach (XmlNode node2 in productList)
{
decimal qty = Convert.ToDecimal(node.ChildNodes[3].InnerText);
decimal unitpx = Convert.ToDecimal(node.ChildNodes[4].InnerText);
totalItemPrice += (qty * unitpx);
}
被认为是一个子节点。因此,将InvoiceItem
和[4]
换成[5]
和[5]
工作。
[6]