簡體   English   中英

通過DOM方法處理XML時未處理C#FormatException

[英]C# FormatException was unhandled while processing XML via DOM approach

我剛剛開始學習SAX / Stream以及用於解析和處理XML文件的DOM方法。 我的情況是,我要處理從給定的XML文件中獲取的信息,該XML文件是從托管的FTP服務器檢索到的,將其放入單獨的Array-lists中,然后再將這些列表傳遞到DBManager中以將它們添加到數據庫中。 但是,在我想將其添加到數據庫之前,我希望用戶在“添加到數據庫”之前按下“檢查按鈕”以確保信息確實正確。 但這以某種方式觸發了FormatException。 我沒有在任何類或變量用法中看到任何“ DateTime”,這使我更加困惑。

編輯1:感謝Abdo Hussein,我意識到截圖中提到的問題是我使用的是node ,而不是node2 但是,相同的問題適用於下一行,也可能適用於下一行。 盡管它們仍與node而不是node2處於同一循環中。

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

在此處輸入圖片說明

未處理FormatException

這是該特定類的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; }
}

DateTime只是故障排除技巧,並不意味着您有DateTime Format異常。

您正在foreach中使用node變量而不是node2 ,請檢查一下。

注意 :-

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

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

2-檢查您的CultureInfo,因為格式不同取決於不同的“ CultureInfo”

啊,我現在明白了。

我要轉換的每個十進制變量的問題2的節點1節點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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM