이번에 코레일 프로젝트를 맞게 되었다.
하지만 코레일은 EUC-KR로 된 XML이였고 윈폰과 실버라이트는 지원하지 않았다.
하지만 어떤 고마우신분이 라이브러리를 제공해 주셧다 프로젝트 시작하기 3일전에… 타이밍!!!
일단 외부에서 EUC-KR로 된 xml파일을 윈폰에서 사용하는 방법
public void GetXmlData(Action<Dictionary<string, string>, Exception> callback, string url) { WebClient webClient = new WebClient(); webClient.OpenReadAsync(new Uri(url)); webClient.OpenReadCompleted += (s, e) => { Stream readStream = e.Result; Byte[] euckrXML = new Byte[readStream.Length]; readStream.Read(euckrXML, 0, euckrXML.Length); readStream.Close(); var temp = EUCKR_Unicode_Converter.GetUnicodeString(euckrXML); XmlReader reader = XmlReader.Create(new StringReader(temp)); XElement xe = XElement.Load(reader); //상위 element data Dictionary<string, string> dict = new Dictionary<string, string>(); foreach (var item in xe.Elements()) { dict.Add(item.Name.LocalName, item.Value); } //다수의 하위 elements data var query = from item in xe.Descendants("trn_infos").Descendants("trn_info") select item; List<Dictionary<string, string>> trnsInfos = new List<Dictionary<string, string>>(); foreach (XElement item in query) { Dictionary<string, string> trnInfo = new Dictionary<string, string>(); foreach (XElement subItem in item.Elements()) { trnInfo.Add(subItem.Name.LocalName, subItem.Value); } trnsInfos.Add(trnInfo); } //출력 foreach (var item in trnsInfos) { foreach (var subItem in item) { Debug.WriteLine("{0}:{1}", subItem.Key, subItem.Value); } } callback(dict, null); }; }
위의 XElement 까지만 참고하면 될꺼 같다.
나머지 소스는 그냥 xml을 dictionary로 바꾸기 위한 소스코드이다.
자 이제 euc-kr은 문제 없이 웹으로 부터 받아서 파싱 가능한 상태이다.
그렇다면 보낼때는 어떻게 해야할까?
내가 원하는 결과 값 : 서울 -> "%BC%AD%BF%EF"
이다. 원래 같았으면
string encodingResult = HttpUtility.UrlEncode(url);
이런식으로 urlencode를 이용하겠지만 이렇게
해서 해결하였다.
Byte[] temp = EUCKR_Unicode_Converter.GetEucKRString("서울");
StringBuilder sb = new StringBuilder();
foreach (byte b in temp)
{
sb.AppendFormat("%{0:x}", b);
}
sb.tostring();
카일로님이 만드신 소스 정말 유용한거 같다.^^
원본 소스다.
'Windows Phone 7' 카테고리의 다른 글
[wp7] foreach 문 처음이나 끝 부분을 Skip 하고 싶을때. (0) | 2011.11.16 |
---|---|
[wp7] WCF Rest 에서 Cookie값 받아오기(WCF Login Server Session) (1) | 2011.11.11 |
[WP7] Toast Notification 만드는법 4 (Mango Ver) (0) | 2011.05.27 |
[WP7] Toast Notification 만드는법 3 (Mango Ver) (0) | 2011.05.27 |
[wp7] Toast Notification 만드는법 2 (Mango Ver) (1) | 2011.05.27 |