2009-05-10 7 views
11

내 질문은 본질적으로 단순한 질문입니다. 여기에서 가능한 한 깊이있는 대답을 찾고 있습니다. LINQ to XML은 어떻게 뒷 배경에서 작동합니까?LINQ to XML - 어떻게 작동합니까?

이제 다양한 응용 프로그램에서 LINQ to XML을 사용하여 상당한 경험을 했으므로 인터페이스가 이상한 것은 아니지만 내부 작동 방식에 대해서는 매우 단서가 없습니다. 이제는 LINQ 공급자가 작동하는 방식 (일반적으로 IQueryableIQueryProvider을 구현하고 방문자 패턴을 활용하는 방법)을 일부 이해했습니다. 그러나 LINQ to XML에 대한 LINQ 공급자에 대해 아무 것도 발견하지 못했습니다. Reflector를 사용하여 주변을 어지럽 혀서도 아무 것도 얻을 수 없었습니다. 가장 흥미롭게도, System.Xml.Linq 어셈블리/네임 스페이스 내에서 LINQ 공급자 (구현 IQueryProvider)의 증거를 찾을 수 없었습니다.

LINQ와 XML 모델을 관찰하면서 LINQ 쿼리와 관련 구문이 기술에 너무 중요하지 않은 점에서 다소 독특한 형태의 LINQ로 느껴졌습니다. 더 많은 것을 기반으로하는 것처럼 보입니다. 유용한 확장 메소드를 많이 제공하는 쿼리 가능한 DOM 모델을 중심으로. LINQ to XML은 표준 LINQ to SQL (예 : LINQ to SQL)이 포함 된 쿼리 공급자를 사용하거나 기본적으로 확장 메서드가 포함 된 프레임 워크를 사용할 수 있습니다. 사용을 용이하게하기 위해 LINQ to Objects를 사용하십시오. 또한 XML 코드에서 DOM 계층 구조로의 변환/변환이 어떻게 이루어 졌는지 궁금합니다. XDocument qutie는 이전의 XmlDocument과 비슷합니다. 로드시 문서를 구문 분석하고 해석하기 위해 XmlReader 또는 그 뒤에서 사용합니까?

이것은 매우 궁금한 질문이므로 LINQ to XML이 장면에서 어떻게 작동하는지에 대한 정보를 제공하는 것이 가장 좋습니다. 제 의도는 주로이 특정 LINQ 기술이 설계된 방식을 그림으로 작성하여 나중에 XML과 비슷한 형식의 형식으로 직접 에뮬레이션하려고 시도 할 수있게하려는 것입니다.

답변

13

LINQ to XML은 실제로 XML을 나타내는 개체에서 작동하는 LINQ-to-Objects입니다. 따라서 XDocument (예를 들어)에서 노드를 검색하기 위해 LINQ 쿼리를 작성하면 실제로 IEnumerable <T>을 반환하는 확장 메서드를 호출하고 IEnumerable <T>에 대해 정의 된대로 표준 쿼리 연산자를 호출합니다.

그래서 LINQ-to-XML은 주로 XML을 나타내는 클래스의 XElement 패밀리와 쿼리를보다 쉽게 ​​만들기 위해 제공되는 다양한 확장 메서드로 이루어져 있다고 말할 수 있습니다.

이것은 또한 here으로 설명됩니다.

+0

네, 이것은 제가 의심했던 것입니다. 정보 주셔서 감사합니다. – Noldorin