2013-11-15 59 views
1

我有一個不尋常的問題。我是一個初學者,但我試圖學習如何從XML文檔中提取信息。我以前沒有遇到任何問題,但我現在遇到了麻煩。這裏是發生了什麼:無法將字符串轉換爲int。來自XML元素的數據。 C#

我試圖提取從以下XML的latitude值:通過使用下面的代碼

<ip2locationapi> 
    <countryCode>GB</countryCode> 
    <countryName>United Kingdom</countryName> 
    <region>Wales</region> 
    <city>Cardiff</city> 
    <latitude>51.5</latitude> 
    <longitude>-3.2</longitude> 
</ip2locationapi> 

var latitude = from r in document.Descendants("ip2locationapi") 
       select new 
       { 
        lati = r.Element("latitude").Value, 
       };  

foreach (var item in latitude) 
{ 
    Convert.ToInt32(item.lati); 
} 

但這樣做給了我一個異常,告訴我我無法轉換,因爲它的格式不正確。

有誰知道我可能會做錯什麼?

+0

如果要將其保留爲整數,請嘗試Convert.ToInt32(Convert.ToDouble(item.lati));.否則,做Convert.ToDouble。 –

+0

@MPatel無需爲此調用'Converter'東西。 '(int)Convert.ToDouble(item.lati)'就夠了。 – BartoszKP

+0

@BartoszKP公平點:),我沒有想到! –

回答

2

正如BartoszKP指出的那樣,51.5不是一個int,所以你的問題對我們來說很難確定你想要做什麼。

這就是說,也許這可以讓你去...

var e = document.Descendants("latitude").FirstOrDefault(); 

double d = 0; 
int i = 0; 

if(double.TryParse(e.Value, out d)) 
    i = (int)d; 
else 
    Console.WriteLine("{0} is not valid.", e.Value); 

Console.WriteLine("{0} is a double.", d); 
Console.WriteLine("{0} is a an int.", i); 

記住投(int)d不會拋出一個異常的d值是一個int的範圍之外 - 即,如果d = 2147483648(它大於int的最大值),則由此產生的演員陣容將爲-2147483648