2015-01-09 47 views
-3

條件Double.TryParse(node.ChildNodes [4] .InnerText,出課程)不起作用。它總是返回0。轉換XmlNode.InnerText到雙

foreach (XmlNode node in XmlDoc.SelectNodes("/ValCurs/Valute")) 
       { 
        if (node.ChildNodes[1].InnerText == curr_name) // CharCode 
        { 
         // throw new Exception(node.ChildNodes[4].InnerText); //returns 2.085 but the next condition doesn't work 
         if (Double.TryParse(node.ChildNodes[4].InnerText, out course)) // course value, nominal = 100 
         {  
          if (Int32.Parse(node.ChildNodes[2].InnerText) == 10) course *= 10; //for RUB, BYR nominal = 10 
          if (Int32.Parse(node.ChildNodes[2].InnerText) == 1000) course /= 10; //for JPY, HUF nominal = 1000 
          return course; 
         } 
        } 

XML片段

<Valute id="1"> 
<NumCode>036</NumCode> 
<CharCode>AUD</CharCode> 
<Nominal>100</Nominal> 
<Name>Australian dollars</Name> 
<Value>1276.6300</Value> 
</Valute> 
+1

總是回答「不工作」。此外,張貼XML的fragement。 – 2015-01-09 19:37:22

+0

備註:使用[1]等訪問子節點非常脆弱。訂單改變時會發生什麼? – 2015-01-09 21:34:01

回答

0

的TryParse方法使用當前區域性因此數字格式可能會因您的系統上有所不同。

可以使用的TryParse的替代版本,你傳遞的IFormatProvider作爲參數。 CultureInfo.InvariantCulture使用。作爲小數分隔符:

Double.TryParse(node.ChildNodes[4].InnerText, CultureInfo.InvariantCulture, out course) 

Btw。通過將它們作爲異常來檢查值是非常有趣的方法,但我強烈建議調試/日誌記錄來檢查發生了什麼。

+0

海報爲什麼要「嘗試」這個?只有代碼答案在這裏通常不被接受。請[編輯]提供有關如何解決問題的信息。 – 2015-01-09 19:38:32

+0

我編輯了這篇文章,提供一些額外的信息。 – 2015-01-09 19:48:02

+0

謝謝。這是工作 – user1481900 2015-01-09 20:02:18