- .NET Famework는 XML 자료를 다루는 여러 API를 제공한다. .NET Framework 3.5부터 범용 XML 문서 처리의 주된 수단은 LINQ to XML 이다. LINQ to XML은 가볍고 LINQ 친화적인 DOM과 이를 보충하는 일단의 질의 연산자들로 구성되어 있다.
- LINQ to XML의 모든 형식은 System.Xml.Linq 이름공간에 있다.
전체적인 구조
DOM이란 무엇인가?
<?xml version="1.0" encoding="utf-8"?>
<customer id="123" status="archived">
<firstname>Joe</firstname>
<lastname>Bloggs<lastname>
</customer>
- 다른 모든 XML 파이렃럼 이 파일은 하나의 XML 선언(declaration)으로 시작한다.
- 그 다음은 XML 문서 전체의 뿌리(루트)에 해당하는 요소(element)로 그 이름은 customer이다.
- 이 customer 요소에는 2개의 특성(attribute)이 있다. 각 특성은 이름(id와 status)과 값(“123”, “archived”)으로 구성된다.
- customer 요소 안에는 두 자식 요소 firstname과 lastname이 있다. 이 요소들은 각자 단순 텍스트 내용(“Joe”와 “Bloggs”)을 담고 있다.
- 이러한 구성요소들(선언, 요소, 특성, 값, 텍스트 내용)을 각각 클래스로 나타낼 수 있다.
- 그리고 그런 클래스에 자식 내용을 저장할 수 있는 컬렉션 속성들을 부여한다면, 문서 전체를 나타내는 객체들의 트리를 형성할 수 있다.
- 그러한 트리가 바로 흔히 DOM이라고 줄여서 표기하는 문서 객체 모형(document object model)이다.
LINQ to XML DOM
- LINQ to XML은 다음 두 가지로 이루어진다.
- XML DOM. 이 책에서는 이를 X-DOM이라 부른다.
- 약 10개의 추가적인 질의 연산자들
- 짐작했겠지만 X-DOM은 XDocument나 XElement, XAttribute 같은 형식들로 구성된다.
- 흥미롭게도 X-DOM의 형식들이 LINQ에 묶여 있지는 않다. 즉, LINQ 질의를 작성하지 않고도 X-DOM을 적재, 생성, 갱신, 저장할 수 있다.
- 반대로 LINQ 역시 X-DOM과 무관하게 사용할 수 있다. 즉, 구식의 W3C 표준 준수 형식들로 만든 DOM을 질의하는데 LINQ를 사용할 수 있다. 그러나 그런 접근 방식은 짜증스럽고 제한적이다.
- X-DOM의 특징은 LINQ 친화적이라는 점이다. 좀 더 구체적으로 말하면
- X-DOM에는 유용한(추가적인 질의가 가능하다는 점에서) IEnumerable 순차열을 출력하는 메서드들이 있다.
- X-DOM은 LINQ 투영을 통해서 X-DOM 트리를 구축할 수 있는 생성자들을 제공한다.
X-DOM의 개요
- 아래 그림은 핵심 X-DOM 형식들과 그 관계를 나타낸 것이다. 이 중 가장 흔히 쓰이는 형식은 XElement이다. XObject는 상속 계통구조의 뿌리이고, XElement와 XDocument는 포함 관계(containership) 계통구조의 뿌리이다.

- 아래 그림은 아래 코드로부터 생성된 X-DOM 트리를 보여준다.
string xml = @"<customer id='123' status='archived'>
<firstname>Joe</firstname>
<lastname>Bloggs<!--멋진 이름--></lastname>
</customer>";
XElement customer = XElement.Parst(xml);
