본문 바로가기
C#

C#] LINQ to XML(XDocument) vs XML DOM(XmlDocument)

by Fastlane 2022. 1. 4.
728x90
반응형

LINQ to XML은 LINQ를 사용할 수 있는 in-memory XML programming interface이다. 

LINQ to XML은 XML document를 memory로 가져온 DOM(Document Object Model)과 같다. document를 쿼리, 수정이 가능하고 수정 후 파일로 저장, serialize 가능하다. 하지만 DOM과 아래내용이 다르다. 

 

  • 가벼운 object model을 제공하며, 다루기 쉽다. 
  • C# 언어의 이점을 가진다. 
  • Language-Integrated Query(LINQ)를 사용할 수 있다.

쿼리를 사용하여 in-memory XML document의 elements, attributes를 가져올 수 있다. XPath와 XQuery와 비교될 수 있지만, 더 강력한 typing, compile-time checking, debugger 지원을 제공한다. 

 

XML Tree 만들기 

<Contacts>
  <Contact>
    <Name>Patrick Hines</Name>
    <Phone Type="Home">206-555-0144</Phone>
    <Address>
      <Street1>123 Main St</Street1>
      <City>Mercer Island</City>
    </Address>
  </Contact>
</Contacts>

1. XmlDocument 방식으로 만들기 

bottom up방식으로 만든다.

맨처음 document를 만들고, elements를 만드록 document에 elements를 추가하는 방식이다. 

XmlDocument doc = new XmlDocument();
XmlElement name = doc.CreateElement("Name");
name.InnerText = "Patrick Hines";
XmlElement phone1 = doc.CreateElement("Phone");
phone1.SetAttribute("Type", "Home");
phone1.InnerText = "206-555-0144";
XmlElement street1 = doc.CreateElement("Street1");
street1.InnerText = "123 Main St";
XmlElement city = doc.CreateElement("City");
city.InnerText = "Mercer Island";
XmlElement address = doc.CreateElement("Address");
address.AppendChild(street1);
address.AppendChild(city);
XmlElement contact = doc.CreateElement("Contact");
contact.AppendChild(name);
contact.AppendChild(phone1);
contact.AppendChild(address);
XmlElement contacts = doc.CreateElement("Contacts");
contacts.AppendChild(contact);
doc.AppendChild(contacts);

2. LINQ to XML 방식으로 만들기 

document object를 만들지 않는다. document의 root level이 필요하면, XDocument class를 사용한다. 

 

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("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
            )
        )
    );

들여쓰기 코드로 인해, XML 구조를 볼 수 있다. 

 

Static method for loading XML

LINQ to XML은 XML load시 사용하는 static method를 제공한다. 

 

1. XmlDocument 방식으로 만들기 

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(@"books.xml");

 

2. LINQ to XML 방식으로 만들기 

XElement.Load(@"books.xml");

 

XmlDocumentFragment class와 동일한 기능의 class는 LINQ to XML에서 제공하지 않는다. 

 

LINQ to XML은 XPathNavigator를 제공한다. 

 

 

728x90
반응형

댓글