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

|

이번 포스팅에서는 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;

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



And