2016-06-27 11 views
0

XMLファイルの解析と処理のためのDOMアプローチと同様にSAX/Streamの学習を始めました。私のシナリオは、私がホストしていたFTPサーバから取得したXMLファイルから情報を処理し、リストを別のArrayリストに入れてからDBManagerに渡してデータベースに追加するというものです。しかし、データベースに追加する前に、「データベースに追加する」前に情報が実際に正しいかどうかを確認するために、「チェック・ボタン」を押してください。しかし、それは何とかFormatExceptionを引き起こします。私は私のクラスや変数の使い方に「DateTime」は表示されません。DOMアプローチによるXMLの処理中にFormatExceptionが処理されなかった

EDIT 1:アブド・フセインのおかげで、私はスクリーンショットで述べた問題は、私はノード、ないノード2を使用していたことに気づきました。しかし、同じ問題が次の行に適用され、おそらく後の行にも適用されます。それらはまだノードと同じループ内にあり、ノード2ではありません。

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

enter image description here

FormatException was unhandled

これは、私が知っている(長すぎると厄介なので、後に、私は過去を取得する必要があるため、私はそれを残しておきます、この特定のクラスのためのペーストビンコードです

<?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> 
http://pastebin.com/FewCm23W以下

は、私が働いているXMLになります)、この最初の

これらは、記憶すべき情報の異なる種類のクラスである:

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

答えて

1

のDateTimeだけで、トラブルシューティングのヒントである、という意味ではありませんあなたはDateTime Format例外があります。

ノードをforeachで使用しています。ノード2をチェックしてください。

の1- FormatException:値の有効な形式の番号ではありません - が:

注意。

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

2 - フォーマットは私が今理解し、異なる "のCultureInfo" の

+0

どのforeachを指定するように注意しますか? – Kei

+0

ノード2で取った値を計算してノード – Kei

+0

Aaahに保存したいので、休憩して何か他の作業をして戻った後、node2の愚かなミスがどこにあるかを見ました。しかし、問題はこれらの行のためです: invoice.ShippingCharges = Convert.ToDecimal(node.ChildNodes [4] .InnerText); invoice.InvoiceTotal = Convert.ToDecimal(node.ChildNodes [5] .InnerText); 問題が解決しない – Kei

1

ああに依存して異なるとしてあなたのCultureInfoを確認してください。

問題私が変換しようとしている小数点以下の変数のそれぞれについてnode2の代わりにnode1を指定してください。

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); 
関連する問題