C#/프로그래밍 고급

C# 프로그래밍 고급 - 13. Linq 응용

tita 2024. 5. 30. 18:21

Linq는 다양하게 응용이 가능하지만 그 중 대표적으로 XML와 결합할 수 있습니다.

 

 

<Linq to XML>

XML은 데이터를 나타내는 데 사용되는 다목적 마크업 언어입니다.

XML의 기본 용어와 규칙으르 살펴보겠습니다. XML은 요소(Element)라고 부르는 태그(Tag)로 구성됩니다.

내용이 있는 태그 : <태그> 내용 </태그>
내용이 없는 태그 : <태그 / >

 

XML 태그는 속성으로 추가적인 값을 가질 수 있습니다.

내용이 있는 태그 : <태그 속성="값" 속성="값" 속성="값"> 내용 </태그>
내용이 없는 태그 : <태그 속성="값" 속성="값" 속성="값" / >

 

다음과 같은 형태로 계층 구조를 만들게 되는데 최상위에는 요소가 하나만 올 수 있습니다.

<people>
    <person birthday="12/09">
        <name>윤인성</name>
        <region>서울</region>
    </person>
    <person birthday="2/14">
        <name>연하진</name>
        <region>대구</region>
    </person>
</people>

 

 

 

 

<웹에서 XML 가져오기>

웹에서 XML 데이터를 가져올 때는 XElement.Load() 메서드를 사용합니다.

XElement.Load() 메서드의 매개변수에는 웹에서 가져오고 싶은 XML의 경로를 지정합니다.

class Program
{
    static void Main(string[] args)
    {
        string url = "http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1150061500";
        XElement xElement = XElement.Load(url);
        Console.WriteLine(xElement);
    }
}

 

 

 

<XML 파싱>

웹에서 가져온 XML 데이터를 우리가 원하는 형태로 변환하는 것을 파싱(Parsing)이라고 간단하게 부릅니다.

Linq를 활용해서 xElement 객체(XML 파일)의 Descendants() 메서드를 활용해 data라는 이름의 태그를 모두 추출합니다.

// data 태그 추출
static void Main(string[] args)
{
    string url = "http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1150061500";
    XElement xElement = XElement.Load(url);
    var xmlQuery = from item in xElement.Descendants("data")
                   select item;

    foreach(var item in xmlQuery)
    {
        Console.WriteLine(item);
    }
    
}