[C#] XML에서 원하는 데이터 검색하기

C#에서 XML 데이터를 처리해야할 기능이 필요하여 이리 저리 찾은 내용을 정리한 글입니다. 먼저 사용할 XML 데이터는 아래와 같다고 하겠습니다.


    
        
            The Autobiography of Benjamin Franklin
            
                Benjamin
                Franklin
            
            8.99
        
        
            The Confidence Man
            
                Herman
                Melville
            
            11.99
        
        
            The Gorgias
            
                Plato
            
            9.99
        

가장 먼저 위의 XML 데이터를 쉽게 조회하기 위해 트리 형태로 구성하기 위한 준비 코드는 다음과 같습니다.

XmlTextReader reader = new XmlTextReader("books.xml");
XmlDocument xdoc = new XmlDocument();
xdoc.Load(reader);

자.. 이제 부터 원하는 데이터를 얻어 낼 수 있는데요. 다음과 같이 네 가지의 목표를 정하고 목표를 이루어 나가 보겠습니다.

  1. 은 몇개인가?
  2. 두번째 의의 값은 무엇인가?
  3. 두번째 의 속성 genre의 값은 무엇인가?
  4. 두번째 의 의 의 값은 무엇인가?

먼저 답은 다음과 같습니다.

  1. 3개
  2. The Confidence Man
  3. novel
  4. Herman

위의 답을 내어 내기 위한 코드를 하나 하나 제시해 보면 다음과 같습니다.

“은 몇개인가?”에 대한 코드

XmlNodeList bookNodes = xdoc.DocumentElement.SelectNodes("book");
Console.WriteLine(" 노드의 개수: " + bookNodes.Count);

“두번째 의의 값은 무엇인가?”에 대한 코드

XmlNode titleNode = bookNodes[1].SelectSingleNode("title");
Console.WriteLine("두번째 의의 값은: " + titleNode.InnerText);

“두번째 의 속성 genre의 값은 무엇인가?”에 대한 코드

String genre = bookNodes[1].Attributes["genre"].Value;
Console.WriteLine(genre);

끝으로.. “두번째 의 의 의 값은 무엇인가?”에 대한 코드

String firstName = bookNodes[1].SelectSingleNode("author")
    .SelectSingleNode("first-name").InnerText;
Console.WriteLine(firstName);

끝으로 이보다 효율적인 방법이 존재하겠지요? 알고 계시다면 한수 부탁드립니다!

“[C#] XML에서 원하는 데이터 검색하기”에 대한 3개의 댓글

  1. C# 2.0까지는 XmlSerialization이나 XmlReader 두 가지를 사용했고
    C# 3.0 이후부터는 XML LINQ가 많이 사용되고 있습니다.
    처리속도는 XmlReader > XML LINQ > XmlSerialization 순이고
    가독성은 XML LINQ > XmlReader > XmlSerialization 순입니다.
    XmlReader, XML LINQ 사이의 처리속도는 차이가 크지 않아 XML LINQ가 많이 사용되고 있습니다. 각각 장단점이 있기 때문에 알아보시면 도움이 될겁니다.

    1. 감사합니다! LINQ가 처음 소개되었을때 매우 뛰어난 기능으로 소개가 되었는데.. 줄곤 사용해 보질 못했습니다. 이번 기회에 LINQ를 통해 XML에 접근해봐야겠네요. 아… 어제 공부해 놓은 것은 말짱 도루묵이였던가……. 어.. 흑..

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다