[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);

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

[GIS] DuraMap-Xr, 자체포맷 항공영상(XrR) 추가하기

듀라맵은 대용량의 항공영상을 자체포맷으로 변환하여, 변환된 자체포맷을 최소한의 메모리를 사용하고 빠른 속도로 표출할 수 있습니다. 변환된 자체포맷은 XrR이라는 확장자를 갖습니다. 이 글은 XrR 파일을 레이어로 추가하는 방법에 대한 예제입니다. 먼저 다음과 같은 폼을 디자인합니다.

사용자 삽입 이미지

폼에는 듀라맵 컴포넌트와 Add XrR Layer라는 버튼이 있으며 OpenFileDialog 컴포넌트가 있습니다. 이 글에서 작성되는 코드는 모두 Add XrR Layer 버튼의 클릭 이벤트가 전부이며 아래와 같습니다.

openFileDialog.Filter = "XrR Files(*.XrR Files)|*.xrr";
DialogResult DR = openFileDialog.ShowDialog();
if (DR == DialogResult.OK)
{
    String FileName = openFileDialog.FileName;
    String LayerName = FileName;

    axXr1.Layers.AddTileMapLayer(LayerName, FileName);
    axXr1.WaitForAllConnections();

    axXr1.ZoomFullExtent();
}

XrR 파일을 레이어로 추가하기 위한 매서드는 AddTileMapLayers 입니다.  아래는 XrR 레이어를 하나 추가한 결과 화면입니다.

사용자 삽입 이미지