이번 포스팅에서는 XML 노드를 다룰때 많이 접하는 3가지의 경우에 대해서 다뤄보겠습니다.
1.Node의 InnerText 접근
2.Node의 Property 접근
3.네임스페이스(namespace)가 있는 Node의 접근
우선 1번과 2번을 설명드리겠습니다. 아래와 같은 XML 이 있다고 가정합시다~
<response xmlns:dc="http://purl.org/dc/elements/1.1/"> <items> <item> <nameData nameTitle="defender1">홍진현</nameData> </item> <item> <nameData nameTitle="losetrackof">호구방위대</nameData> </item> <item> <dc:nameData nameTitle="defender2">홍진현</nameData> </item> </items> </response>
WebClient wc = null; XmlDocument doc = null; XmlNode root = null; wc = new WebClient() { Encoding = Encoding.UTF8 }; doc = new XmlDocument(); try { List<string> ltReturn = new List<string>(); LoadedXML = wc.DownloadString(new Uri("http://TargetURL?param1=1")); doc.LoadXml(LoadedXML); root = doc.SelectSingleNode("response"); XmlNode ItemsList = root.SelectSingleNode("items"); foreach (XmlNode nowItem in ItemsList) { ltReturn.Add(nowItem.SelectSingleNode("nameData").InnerText); // nowItem[0].InnerText ltReturn.Add(nowItem.Attributes["nameTitle"]); } return ltReturn; } catch (Exception) { return null; } finally { doc = null; root = null; wc.Dispose(); }위에서 처럼SelectSingleNode 를 통해서 노드를 선택하거나 nowItem[0] 처럼 노드를 배열처럼 사용해서 값들을 불러 올 수 있습니다.
그리고 Node의 Property는 노드의 Attributes["프로퍼티명"]을 이용해서 접근이 가능합니다.
그러면 dc:nameData 같이 네임스페이가 있는 노드에 위에처럼 접근한다면 가능할까요?
당연히 되지 않습니다.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); nowItem.SelectSingleNode("dc:nameData,nsmgr).InnerText;
이처럼 네임스페이스관리자를 통해서 접근이 가능하다.
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 사용자 정의 코드조각 추가하기 (Code Snippet) (1) | 2015.03.23 |
---|---|
[C#] 이벤트 생성 및 사용자 정의 EventArg (3) | 2015.03.23 |
[C#] XML 다루기 - REST 데이터 받아서 처리하기 (0) | 2015.03.20 |
[C#] List Collection 재정의(Override) 하기 (2) | 2015.03.19 |
[C#] 날짜 비교 (Datetime 시간차이 구하기) (0) | 2015.03.19 |