이번 포스팅에서는 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.
}
그리고 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;
이처럼 네임스페이스관리자를 통해서 접근이 가능하다.
'프로그래밍 > 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 |