【问题标题】:C# FormatException was unhandled while processing XML via DOM approach通过 DOM 方法处理 XML 时未处理 C# FormatException
【发布时间】:2016-06-27 09:38:19
【问题描述】:

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

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

这些是用于存储不同类型信息的类:

发票.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; }
}

【问题讨论】:

    标签: c# xml dom xml-parsing formatexception


    【解决方案1】:

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

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

    请注意:-

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

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

    2- 检查您的 CultureInfo,因为格式不同取决于不同的“CultureInfo”

    【讨论】:

    • 关心指定哪个foreach?
    • 因为我希望能够计算出在node2中取的值并将其存储在node中
    • 啊啊,休息一下,做点别的事情然后回来,我看到了 node2 的愚蠢错误在哪里。但问题是对于这些行: invoice.ShippingCharges = Convert.ToDecimal(node.ChildNodes[4].InnerText); invoice.InvoiceTotal = Convert.ToDecimal(node.ChildNodes[5].InnerText);问题依然存在
    【解决方案2】:

    啊,我现在明白了。

    我要转换的每个十进制变量的问题 1- 节点而不是节点 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);
    
    }
    

    问题 2- 我不知道整个 InvoiceItem 被视为子节点。因此,将我的 [4][5] 交换为 [5][6] 就可以了。

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

    【讨论】:

      猜你喜欢
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 2011-08-22
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多