通过 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);
我刚刚开始学习 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);