2013-11-15 4 views
1

이상한 문제가 있습니다. 저는 초보자이지만 XML 문서에서 정보를 추출하는 방법을 배우려고합니다. 전에 아무런 문제없이 해봤지만 지금은 문제가 있습니다. 여기 무슨 일이야 : 다음 코드를 사용하여문자열을 int로 변환 할 수 없습니다. XML 요소의 데이터입니다. C#

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

:

나는 다음과 같은 XML에서 latitude 값을 추출하려고 시도

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 공정한 점 : 나는 그것을 생각하지 않았다! –

답변

6

분명히 51.5은 정수가 아닙니다. 부동 소수점 값입니다. 대신 Convert.ToDouble을 사용하십시오.

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

d의 값이 int의 범위를 벗어나면 캐스트 (int)d이 예외가 발생하지 않습니다 명심 ... 어쩌면 이것이 당신이 가고 얻을 수 말했다 - 경우 즉, d = 2147483648 (AN int의 최대 값보다 큰) 당신이 시도 정수에로 유지하려면, 결과 캐스트 -2147483648

관련 문제