[C#] XML 다루기 - Property 와 Node 접근하기, 네임스페이가 있는 Node처리리

|

이번 포스팅에서는 XML 노드를 다룰때 많이 접하는 3가지의 경우에 대해서 다뤄보겠습니다.


1.Node의 InnerText 접근

2.Node의 Property 접근

3.네임스페이스(namespace)가 있는 Node의 접근


우선 1번과 2번을 설명드리겠습니다. 아래와 같은 XML 이 있다고 가정합시다~


01.<response xmlns:dc="http://purl.org/dc/elements/1.1/">
02. 
03.<items>
04.   <item>
05.    <nameData nameTitle="defender1">홍진현</nameData>
06.   </item>
07.   <item>
08.    <nameData nameTitle="losetrackof">호구방위대</nameData>
09.   </item>
10.   <item>
11.    <dc:nameData nameTitle="defender2">홍진현</nameData>
12.   </item>
13.</items>
14. 
15.</response>


소스


01.WebClient wc = null;
02.XmlDocument doc = null;
03.XmlNode root = null;
04. 
05.wc = new WebClient() { Encoding = Encoding.UTF8 };
06.doc = new XmlDocument();
07. 
08.try
09.{
10.    List<string> ltReturn = new List<string>();
11. 
12.    LoadedXML = wc.DownloadString(new Uri("http://TargetURL?param1=1"));
13.    doc.LoadXml(LoadedXML);
14. 
15.    
16.    root = doc.SelectSingleNode("response");
17. 
18.    XmlNode ItemsList = root.SelectSingleNode("items");
19. 
20.     
21.    foreach (XmlNode nowItem in ItemsList)
22.    {
23.       ltReturn.Add(nowItem.SelectSingleNode("nameData").InnerText); // nowItem[0].InnerText
24.       ltReturn.Add(nowItem.Attributes["nameTitle"]);
25.    }
26. 
27.    return ltReturn;
28. 
29.}
30.catch (Exception)
31.{
32.    return null;
33.}
34.finally
35.{
36.    doc = null;
37.    root = null;
38.    wc.Dispose();
39.}
위에서 처럼SelectSingleNode 를 통해서 노드를 선택하거나  nowItem[0] 처럼 노드를 배열처럼 사용해서 값들을 불러 올 수 있습니다.

그리고 Node의 Property는 노드의 Attributes["프로퍼티명"]을 이용해서 접근이 가능합니다.


그러면 dc:nameData 같이 네임스페이가 있는 노드에 위에처럼 접근한다면 가능할까요? 

당연히 되지 않습니다.


1.XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
2.nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
3. 
4.nowItem.SelectSingleNode("dc:nameData,nsmgr).InnerText;

이처럼 네임스페이스관리자를 통해서 접근이 가능하다. 



And