LINQ to XML 개요

LINQ to XML에서는 .NET LINQ(Language-Integrated Query) Framework를 사용하는 메모리 내 XML 프로그래밍 인터페이스를 제공합니다. LINQ to XML은 .NET 기능을 사용하며 업데이트되고 다시 디자인된 DOM(문서 개체 모델) XML 프로그래밍 인터페이스와 유사합니다.

XML은 다양한 컨텍스트에서 데이터의 형식을 지정하는 방법으로 널리 채택되고 있습니다. 예를 들어, 웹에 있는 구성 파일, Microsoft Office Word 파일 및 데이터베이스에서 XML을 찾을 수 있습니다.

LINQ to XML XML을 사용한 프로그래밍에 대한 최신의 재설계된 접근 방식입니다. DOM(문서 개체 모델)의 메모리 내 문서 수정 기능을 제공하며 LINQ 쿼리 식을 지원합니다. 이러한 쿼리 식은 구문적으로 XPath와 다르지만 유사한 기능을 제공합니다.

개발자 LINQ to XML

LINQ to XML 다양한 개발자를 대상으로 합니다. 작업을 수행하려는 평균 개발자의 경우 LINQ to XML SQL 유사한 쿼리 환경을 제공하여 XML을 더 쉽게 만듭니다. 프로그래머는 약간의 시간만 투자해도 원하는 프로그래밍 언어로 간결하고 강력한 쿼리를 작성하는 방법을 배울 수 있습니다.

Professional 개발자는 LINQ to XML 사용하여 생산성을 크게 높일 수 있습니다. LINQ to XML 사용하면 표현력이 더 작고 더 강력한 코드를 더 적게 작성할 수 있습니다. 이와 동시에 여러 데이터 도메인에서 쿼리 식을 사용할 수 있습니다.

LINQ to XML XML 프로그래밍 인터페이스입니다.

LINQ to XML .NET 프로그래밍 언어 내에서 XML로 작업할 수 있는 LINQ 지원 메모리 내 XML 프로그래밍 인터페이스입니다.

LINQ to XML XML 문서를 메모리로 가져온다는 DOM(문서 개체 모델)과 비슷합니다. 문서를 쿼리하고 수정할 수 있으며 문서를 수정한 후 파일에 저장하거나 serialize하고 네트워크를 통해 보낼 수 있습니다. 그러나 LINQ to XML DOM과 다릅니다.

  • 더 가볍고 작업하기 쉬운 새 개체 모델을 제공합니다.
  • C# 및 Visual Basic 언어 기능을 활용합니다.

LINQ to XML 가장 중요한 장점은 LINQ(Language-Integrated Query)와의 통합입니다. 이 통합을 통해 메모리 내 XML 문서에 대한 쿼리를 작성하여 요소와 특성의 컬렉션을 검색할 수 있습니다. LINQ to XML 쿼리 기능은 XPath 및 XQuery와 기능(구문은 아니지만)에서 비교할 수 있습니다. C# 및 Visual Basic LINQ를 통합하면 더 강력한 입력, 컴파일 시간 검사 및 향상된 디버거 지원이 제공됩니다.

LINQ to XML 또 다른 이점은 쿼리 결과를 매개 변수 XElementXAttribute 로 사용하고 개체 생성자를 사용하면 XML 트리를 만드는 강력한 방법을 사용할 수 있다는 것입니다. 개발자는 함수 생성이라는 이 방법을 사용하여 XML 트리의 모양을 쉽게 변환할 수 있습니다.

예를 들어 샘플 XML 파일: 일반적인 구매 주문에 설명된 대로 일반적인 XML 구매 주문이 있을 수 있습니다. LINQ to XML 사용하여 다음 쿼리를 실행하여 구매 주문의 모든 항목 요소에 대한 부품 번호 특성 값을 가져올 수 있습니다.

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

C#에서 메서드 구문 형식으로 다시 작성할 수 있습니다.

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

또 다른 예로, $100보다 큰 값을 가진 품목의 목록을 부품 번호 순서로 정렬하려고 할 수 있습니다. 이 정보를 얻으려면 다음 쿼리를 실행할 수 있습니다.

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
       item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item

C#에서는 메서드 구문 형식으로 다시 작성할 수 있습니다.

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

이러한 LINQ 기능 외에도 LINQ to XML 향상된 XML 프로그래밍 인터페이스를 제공합니다. LINQ to XML 사용 하 여 다음을 수행할 수 있습니다.

  • 파일 또는 스트림에서 XML을 로드합니다.
  • 파일이나 스트림에서 XML을 serialize합니다.
  • 함수 생성을 사용하여 XML을 새로 만듭니다.
  • XPath와 같은 축을 사용하여 XML을 쿼리합니다.
  • Add, Remove, ReplaceWithSetValue와 같은 메서드를 사용하여 메모리 내 XML 트리를 조작합니다.
  • XSD를 사용하여 XML 트리의 유효성을 검사합니다.
  • 이러한 기능을 함께 사용하여 XML 트리의 모양을 변환할 수 있습니다.

XML 트리 만들기

LINQ to XML 프로그래밍의 가장 중요한 장점 중 하나는 XML 트리를 쉽게 만들 수 있다는 것입니다. 예를 들어 작은 XML 트리를 만들려면 다음과 같이 코드를 작성할 수 있습니다.

XElement contacts =
new XElement("Contacts",
    new XElement("Contact",
        new XElement("Name", "Patrick Hines"),
        new XElement("Phone", "206-555-0144",
            new XAttribute("Type", "Home")),
        new XElement("phone", "425-555-0145",
            new XAttribute("Type", "Work")),
        new XElement("Address",
            new XElement("Street1", "123 Main St"),
            new XElement("City", "Mercer Island"),
            new XElement("State", "WA"),
            new XElement("Postal", "68042")
        )
    )
);
Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

참고

예제의 Visual Basic 버전에서는 XML 리터럴을 사용합니다. C# 버전과 같이 Visual Basic 사용할 XElement 수도 있습니다.

자세한 내용은 XML 트리를 참조하세요.

추가 정보