XDocument 클래스와 LINQ
.NET/C# 2007. 8. 30. 00:22 |XDocument 클래스
Framework 3.0 에 들어서면서 새로이 등장한 클래스이다.
그 이전 Framework 1.1, 2.0 에서 XML 작성을 해보았다면, 그 노가다와 다름없는 코딩을
해보았을 것이다.
XmlDocument 또는 XmlTextWriter, XmlTextReader 클래스 사용하여 편리하게 XML 작업을 했다.
XmlDocument 는 DOM 과 같은 형태로 작업이 가능하며, 빠른 탐색이 장점이다.
XmlTextWriter 와 XmlTextReader 는 Inline 작업이 가능하며, 간결한 사용법이 장점이었다.
기존 XmlTextWriter 로 XML 만드는 일반적인으로 작업하는 예 |
하지만, 오늘 XDocument 클래스를 알게된다면, 위 두 클래스를 쳐다도 안보게 될 상황이 생길 것 같다^^
XDocument 시작하기
기존 DOM 과 같은 형태로 객체를 생성하여 XML 을 만드는 방법이다.
// XElement 의 객체를 생성하는 방법
XDocument xdoc = new XDocument();
xdoc.Add(new XComment("XML TEST"));
XElement xele1 = new XElement("ROOT");
xele1.Add(new XElement("Child1", "1"));
xele1.Add(new XElement("Child2", "2"));
xdoc.Add(xele1);
Console.WriteLine(xdoc.ToString()); |
[코드1] 객체를 생성하여 XML 만들기 |
위와 같은 방법은 Element 에 가공이 필요할 때(attribute 추가) 사용하면 될 것 같다.
만약, 그러한 작업이 필요 없다면 더욱 간결하게 코딩 할 수 있다.
// params 로 선언된 XDocument 에 연속적으로 XElement 를 코딩.
xdoc = new XDocument(
new XComment("XML TEST"),
new XElement("ROOT",
new XElement("Child1", "1"),
new XElement("Child2", "2")));
// 위의 결과와 동일
Console.WriteLine(xdoc.ToString()); |
[코드2] XDocument 의 params 인자로 연속적인 작업 |
XDocument 의 두번째 생성자는 params 키워드로 object 로 선언된 불특정 다수의 인자값을
받을 수 있다.
그렇기 때문에 위의 [코드2] 와 같은 연속적인 인자를 받는 코딩이 가능하다.
LINQ 를 이용한 Element 추출
위의 샘플과 같은 XML 데이터가 있을 경우, 이것을 추출하기 위해 탐색작업을 해야한다.
Framework 3.0 의 LINQ 는 간결하다 못해, 강력한 기능의 데이터 탐색 작업을 할 수 있다.
var result = from r1 in xdoc.Element("ROOT").Elements()
where r1.Name == "Child1"
select r1;
foreach (var r in result)
{
Console.WriteLine(r.Name);
} |
[코드3] LINQ 를 이용한 XML 탐색 작업 |
XML Element Name 이 Child1 인 것을 탐색하는 구문이다.
기존 SQL 쿼리와 다른 것은 select 가 맨 마지막에 위치한다는 것이다.
데이터베이스의 SQL 구문과 C# 의 객체지향을 어느정도 이해한다면
그리 어렵지 않게 LINQ 쿼리를 만들어 낼 수 있을 것이다.
'.NET > C#' 카테고리의 다른 글
LINQ 의 OUTER JOIN 작업 (0) | 2007.09.04 |
---|---|
LINQ to SQL Classes 와 LINQ의 JOIN 작업 (2) | 2007.09.04 |
XDocument 클래스와 LINQ (0) | 2007.08.30 |
확장 메서드( Extension Method ) (0) | 2007.08.29 |
SoundPlayer 클래스로 WAVE 파일 재생 (0) | 2007.08.12 |
[제네릭 4편] 제약이 붙은 제네릭 클래스 (0) | 2007.07.04 |
댓글을 달아 주세요