通过 DOM 方法处理 XML 时未处理 C# FormatException

C# FormatException was unhandled while processing XML via DOM approach

我刚刚开始学习 SAX/Stream 以及 DOM 解析和处理 XML 文件的方法。我的场景是,我正在处理从我托管的 FTP 服务器检索到的给定 XML 文件的信息,在将列表传递到我的 DBManager 以添加它们之前将其放入单独的数组列表中入数据库。但是,在我想将它添加到数据库之前,我希望用户在 "adding to database" 之前按 "check button" 以确保信息确实正确。但这会以某种方式触发 FormatException。我在我的 classes 或变量使用中没有看到任何 "DateTime",这让我更加困惑。

编辑 1:感谢 Abdo Hussein,我意识到屏幕截图中所述的问题是我使用的是 node,而不是 node2 .但是,同样的问题适用于下一行,也可能适用于下一行。尽管它们仍然在与 node 而不是 node2.

相同的循环中
invoice.ShippingCharges = Convert.ToDecimal(node.ChildNodes[4].InnerText);
invoice.InvoiceTotal = Convert.ToDecimal(node.ChildNodes[5].InnerText);

这是这个特定 class 的 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>

这些是 class要存储的不同类型的信息:

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; }
}

发票项目

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; }
}

DateTime 只是一个故障排除提示,并不意味着您有 DateTime 格式异常。

您在 foreach 中使用的是 node 变量,而不是 node2 ,检查一下。

请注意:-

1- FormatException:值不是有效格式的数字。

https://msdn.microsoft.com/en-us/library/9k6z9cdw(v=vs.110).aspx

2- 检查您的 CultureInfo,因为格式因 "CultureInfo"s

而异

嗯,我明白了

问题 1 - 对于我正在转换的每个十进制变量,node2 的节点 intead。

foreach (XmlNode node2 in productList)
{
    decimal qty = Convert.ToDecimal(node.ChildNodes[3].InnerText);
    decimal unitpx = Convert.ToDecimal(node.ChildNodes[4].InnerText);
    totalItemPrice += (qty * unitpx);

}

问题 2- 我不知道整个 InvoiceItem 被认为是子节点。因此,将我的 [4][5] 交换为 [5][6] 有效。

invoice.ShippingCharges = Convert.ToDecimal(node.ChildNodes[5].InnerText);
invoice.InvoiceTotal = Convert.ToDecimal(node.ChildNodes[6].InnerText);