다음을 통해 공유


LINQ to XML 개요

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

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

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

LINQ to XML 개발자

LINQ to XML은 다양한 개발자를 대상으로 합니다. 단순히 작업을 수행하려는 일반 개발자의 경우 LINQ to XML을 사용하면 SQL과 비슷한 쿼리 환경을 제공하여 XML을 더 쉽게 만들 수 있습니다. 프로그래머는 약간의 연구를 통해 선택한 프로그래밍 언어로 간결하고 강력한 쿼리를 작성하는 방법을 배울 수 있습니다.

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

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

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

LINQ to XML은 XML 문서를 메모리로 가져온다는 DOM(문서 개체 모델)과 비슷합니다. 문서를 쿼리하고 수정할 수 있으며, 문서를 수정한 후 파일에 저장하거나 직렬화하여 인터넷을 통해 보낼 수 있습니다. 그러나 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의 또 다른 장점은 쿼리 결과를 매개 변수 XElement 로 사용할 수 있고 XAttribute 개체 생성자는 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 to XML은 이러한 LINQ 기능 외에도 향상된 XML 프로그래밍 인터페이스를 제공합니다. LINQ to XML을 사용하여 다음을 수행할 수 있습니다.

  • 파일 또는 스트림에서 XML을 로드합니다.
  • XML을 파일 또는 스트림으로 직렬화합니다.
  • 기능 생성을 사용하여 처음부터 XML을 만듭니다.
  • XPath와 유사한 축을 사용하여 XML을 쿼리합니다.
  • 와 같은 AddRemoveReplaceWith메서드를 사용하여 메모리 내 XML 트리를 조작합니다.SetValue
  • 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 트리를 참조하세요.

참고하십시오