Silverlight/Lecture

Silverlight에서 XML을 읽는 두 가지 간단한 방법

길버트리 2008. 9. 10. 21:58

개요

네이버 실버라이트 카페의 어느 회원분이 질문을 올리셨기에 한번 정리해 보았습니다.

이 포스트에서는 XML이 존재하는 경로에 따라 대응하는 두 가지 방법을 소개하겠습니다.
이 두 가지 방법이면 왠만한 상황에는 다 대체가 되실 것으로 생각합니다.
(Cross Domain 정책에 의해 Blocking 되어있는 경우 제외. ^^;;)

Case 1. xap파일에 포함시켜 배포하는 xml 파일을 읽는 경우 (xml 파일의 속성이 Content 등.)

XDocument.Load(...)를 적극 활용합니다.

Case 2. 외부에 존재하는 xml 파일을 읽는 경우

WebClient.DownloadStringAsync를 통해 xml파일의 내용을 string으로 받아온 후,
XDocument.Parse(...)를 적극 활용합니다.


샘플 프로젝트(Source)



위 샘플 프로젝트를 다운 받아 열어보시면 아래와 같은 솔루션 트리를 보실 수 있습니다.

 

테두리가 쳐져 있는 주요 파일을 설명드리면,

1. System.Xml.Linq는 LINQtoXML사용을 위해서 필요한 어셈블리로서 'Add Reference'를 통해
수동으로 추가시켜 주셔야 합니다.

LINQtoXML을 사용하기 위해서 System.Linq와 System.Xml.Linq
두가지 namespace가 모두 추가되어야 합니다.

2. Inner.xml은 xap 패키지에 포함이 되어 배포가 되며, 속성은 Content(내용)입니다.

Inner.xml

<?xml version="1.0" encoding="utf-8" ?>
<Items>
  <Item>Desk</Item>
  <Item>TV</Item>
  <Item>Table</Item>
  <Item>Kitchen</Item>
  <Item>Room</Item>
</Items>

3. Outer.xml은 외부에 존재하는 임의의 xml 파일을 대표합니다.
Open API 등을 통해 얻어온 XML 데이터라고 가정하고 이해하시면 되겠습니다.

Outer.xml

<?xml version="1.0" encoding="utf-8" ?>
<Items>
  <Item>Car</Item>
  <Item>Road</Item>
  <Item>Tree</Item>
  <Item>Park</Item>
  <Item>Mountain</Item>
</Items>


실행결과

사용자 삽입 이미지

보시는 바와 같이 두가지 파일을 모두 성공적으로 읽어서 Item의 Value만을 LINQ로 추출해 내었습니다.
워낙 간단한 소스라서 코드 설명은 생략합니다. 코드는 샘플 프로젝트를 참고하시기 바랍니다.
감사합니다.