반응형

출처 : http://support.microsoft.com/kb/307548/ko




본 문서에서는 XmlTextReader 클래스를 사용하여 파일에서 XML(eXtensible Markup Language)을 읽는 방법을 설명합니다. XmlTextReader 클래스는 XML에 대한 직접 구문 분석과 토큰화 기능을 제공하고 W3C(World Wide Web Consortium)의 XML 네임스페이스에 대한 사양뿐 아니라 XML 1.0 사양도 구현합니다. 본 문서에서는 XML 문서 개체 모델(DOM) 등의 개체 모델을 사용하는 대신에 XML에 대해 토큰화된 고속 스트림 액세스를 제공합니다.

 

요구 사항

다음은 권장 하드웨어, 소프트웨어, 네트워크 인프라 및 서비스 팩입니다.
  • Microsoft Visual Studio .NET
이 문서는 사용자가 다음 항목을 잘 알고 있다고 가정합니다.
  • XML 용어
  • XML 파일 만들기 및 읽기
 

파일에서 XML을 읽는 방법

이 예에서 사용할 Books.xml이라는 파일은 직접 만들어 사용하거나 .NET Software Development Kit(SDK) QuickStarts의 다음 위치에 있는 예제 파일을 사용할 수 있습니다.
\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
이 프로젝트를 만드는 폴더의 하위 폴더인 \Bin\Debug에 Books.xml을 복사해야 합니다. 또한 Books.xml을 다운로드할 수도 있습니다. 다운로드 위치는 참조 절을 참조하십시오.
  1. Visual Studio .NET을 엽니다.
  2. 새로운 Visual C# .NET 콘솔 응용 프로그램을 만듭니다. 전체 코드 예제 절로 직접 이동하거나 이 절차를 계속 수행하여 응용 프로그램을 빌드할 수 있습니다.
  3. System.Xml.dll 어셈블리에 대한 참조가 프로젝트에 포함되어 있는지 확인합니다.
  4. System.xml 네임스페이스에 using 지시문을 지정합니다. 그러면 나중에 코드에서 XmlTextReader 선언을 한정하지 않아도 됩니다. using 지시문은 항상 선언 앞에 사용해야 합니다.
    using System.Xml;
  5. XmlTextReader 개체의 인스턴스를 생성하고 XML 파일로 채웁니다. 대개 XmlTextReader 클래스는 DOM의 오버헤드 없이 XML을 원시 데이터로 액세스해야 할 경우에 사용됩니다. 따라서 XmlTextReader 클래스는 XML을 빠르게 읽을 수 있는 메커니즘을 제공합니다. XmlTextReader 클래스에는 XML 데이터의 위치를 지정하는 다른 생성자가 있습니다. 다음 코드에서는 XmlTextReader 클래스의 인스턴스를 만들고 Books.xml 파일을 로드합니다. Class1의 Main 프로시저에 다음 코드를 추가합니다.
    XmlTextReader reader = new XmlTextReader ("books.xml");
  6. XML을 읽습니다. 이 단계에서는 외부 "While" 루프를 보여주고, 다음 두 단계에서는 외부 "While" 루프를 사용하여 XML을 읽는 방법을 보여줍니다. XmlTextReader 개체를 생성했으면 Read 메서드를 사용하여 XML 데이터를 읽습니다. Read 메서드는 XML 파일을 순차적으로 계속 읽다가 파일 끝에 도달하면 "거짓(False)" 값을 반환합니다.
    while (reader.Read()) 
    {
        // Do some work here on the data.
    	Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
  7. 노드를 검사합니다. XML 데이터를 처리하기 위해 각 레코드마다 하나의 노드 종류를 갖는데, 이 노드 종류는 NodeType 속성에서 결정할 수 있습니다. NameValue 속성은 현재 노드(또는 레코드)의 노드 이름(요소와 특성 이름)과 노드 값(노드 텍스트)을 반환합니다. NodeType 열거는 노드 종류를 결정합니다. 다음 코드 예제에서는 요소 이름과 문서 종류를 표시합니다. 이 예제에서는 요소 특성이 무시됩니다.
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
       Console.WriteLine(">");
                break;
      case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
      case XmlNodeType. EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                break;
        }
    }
  8. 특성을 검사합니다. 요소 노드 종류에는 관련된 특성 노드 목록이 포함될 수 있습니다. MovetoNextAttribute 메서드는 요소 내의 특성 사이를 순차적으로 이동합니다. HasAttributes 속성을 사용하여 노드에 특성이 있는지 테스트합니다. AttributeCount 속성은 현재 노드의 특성 수를 반환합니다.
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read the attributes.
                    Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                Console.Write(">");
       Console.WriteLine(">");
                break;
      case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
      case XmlNodeType. EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                break;
        }
    }
  9. 프로젝트를 저장하고 닫습니다.
 

전체 코드 예제

using System;
using System.Xml;

namespace ReadXMLfromFile
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            XmlTextReader reader = new XmlTextReader ("books.xml");
            while (reader.Read()) 
            {
                switch (reader.NodeType) 
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);
                        Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine (reader.Value);
                        break;
                    case XmlNodeType.EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
            Console.ReadLine();
        }
    }
}
 

출력 예제

<bookstore>
<book>
<title>
The Autobiography of Benjamin Franklin
</title>
<author>
<first-name>
Benjamin
</first-name>
<last-name>
Franklin
</last-name>
</author>
<price>
8.99
</price>
</book>
<book>
<title>
The Confidence Man
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>
 

참조

다음 파일은 Microsoft 다운로드 센터에서 다운로드할 수 있습니다.
그림 축소그림 확대
다운로드
지금 Books.xml 다운로드 (http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)
자세한 내용은 다음 Microsoft 웹 사이트의 MSDN Magazine에 있는 "XML in .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation" 문서를 참조하십시오.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/xml0101.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/xml0101.asp)
XmlReader 클래스에 대한 자세한 내용은 다음 Microsoft .NET Framework Class Library 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/dotnet/cpref/frlrfsystemxmlxmlreaderclasstopic.htm (http://msdn.microsoft.com/library/dotnet/cpref/frlrfsystemxmlxmlreaderclasstopic.htm)
XmlReader를 사용하여 XML 데이터를 읽는 방법은 다음 Microsoft .NET Framework Developer's Guide 문서를 참조하십시오.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconreadingxmldatausingxmlreader.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconreadingxmldatausingxmlreader.asp)
반응형

+ Recent posts