Visual C++를 사용하여 파일에서 XML 데이터 읽기

이 문서에서는 클래스를 XmlTextReader 사용하여 파일에서 XML 데이터를 읽는 방법을 보여줍니다.

원래 제품 버전: Visual C++
원래 KB 번호: 815658

요약

이 문서에서는 클래스를 사용하여 XmlTextReader 파일에서 XML 데이터를 읽는 방법을 설명합니다. 클래스는 XmlTextReader XML 데이터의 직접 구문 분석 및 토큰화를 제공합니다. 또한 클래스는 XmlTextReader W3C(World Wide Web Consortium)에서 정의한 XML 사양에서 네임스페이스 외에도 XML 1.0 사양을 구현합니다. 이 문서에서는 DOM(XML 문서 개체 모델)과 같은 개체 모델을 사용하는 대신 XML 데이터에 빠르게 토큰화된 스트림 액세스를 수행하는 방법을 설명합니다.

이 문서의 Microsoft Visual C# .NET 버전은 Visual C#을 사용하여 파일에서 XML을 읽는 방법을 참조하세요.

이 문서에서는 다음 Microsoft .NET Framework 클래스 라이브러리 네임스페이스를 참조합니다.System.xml

요구 사항

이 문서에서는 다음과 같은 topics 잘 알고 있다고 가정합니다.

  • XML 용어
  • XML 파일을 만드는 방법 및 읽는 방법

다음 목록에서는 필요한 권장 하드웨어, 소프트웨어, 네트워크 인프라 및 서비스 팩을 간략하게 설명합니다.

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

파일에서 XML 데이터 읽기

이 문서의 예제에서는 Books.xml이라는 파일을 사용합니다. 사용자 고유의 Books.xml 파일을 만들거나 Microsoft .NET SDK(소프트웨어 개발 키트) 빠른 시작에 포함된 샘플 파일을 사용할 수 있습니다. Books.xml 파일을 프로젝트 폴더에 복사해야 합니다.

파일에서 XML 데이터를 읽으려면 다음 단계를 수행합니다.

  1. Visual Studio .NET 2002, Visual Studio .NET 2003 또는 Visual Studio 2005를 시작합니다.

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

    새 프로젝트 대화 상자가 나타납니다.

  3. 프로젝트 형식에서 Visual C++ 프로젝트를 클릭합니다.

    참고

    Visual Studio 2005에서는 Visual C++ 프로젝트가 VisualC++로 변경됩니다.

  4. Visual Studio .NET 2002를 사용하는 경우 템플릿에서 관리되는 C++ 애플리케이션 을 클릭합니다.

    Visual Studio .NET 2003을 사용하는 경우 템플릿에서 콘솔 애플리케이션(.NET) 을 클릭합니다.

    Visual Studio 2005를 사용하는 경우 템플릿에서 CLR 콘솔 애플리케이션 을 클릭합니다.

  5. 이름 상자에 Q815658 입력한 다음 확인을 클릭합니다.

  6. 프로젝트에서 에 대한 참조 System.xml.dll 를 추가합니다. 관리되는 Visual C++ 프로젝트에 참조를 추가하는 방법에 대한 자세한 내용은 관리되는 Visual C++ 프로젝트에 참조 추가를 참조하세요.

  7. 네임스페이스에서 System::Xml using 지시문을 다음과 같이 지정합니다.

    using namespace System::Xml;
    

    코드의 뒷부분에서 클래스 선언을 XmlTextReader 한정할 필요가 없도록 이 작업을 수행합니다. 다른 선언 앞에 using 지시문을 사용해야 합니다.

  8. 개체의 instance 만듭니다XmlTextReader. 개체를 XmlTextReader .xml 파일로 채웁다.

    일반적으로 XmlTextReader 클래스는 DOM의 오버헤드 없이 원시 XML 데이터에 액세스해야 하는 경우에 사용됩니다. 따라서 클래스는 XmlTextReader XML 데이터를 읽는 더 빠른 방법을 제공합니다. 클래스는 XmlTextReader XML 데이터의 위치를 지정하는 서로 다릅니다 constructors .

    다음 코드는 클래스의 XmlTextReader instance 만든 다음 Books.xml 파일을 로드합니다. 함수에 다음 코드를 _tmain 추가합니다.

    XmlTextReader* reader = new XmlTextReader ("books.xml");
    

    참고

    Visual C++ 2005에서는 함수가 _tmain 기본 함수로 변경됩니다.

  9. XML 데이터를 읽습니다.

    참고

    이 단계에서는 외부 while 루프를 보여 줍니다. 이 단계를 수행하는 두 단계에서는 while 루프를 사용하여 XML 데이터를 읽는 방법을 보여 줍니다.

    개체를 XmlTextReader 만든 후 Read 메서드를 사용하여 XML 데이터를 읽습니다.

    Read 메서드는 Read 메서드가 파일의 끝에 도달할 때까지 .xml 파일을 순차적으로 이동합니다. Read 메서드가 파일의 끝에 도달하면 Read 메서드는 false를 반환합니다.

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. 노드를 검사합니다.

    XML 데이터를 처리하기 위해 각 레코드에는 속성에서 확인할 수 있는 노드 형식이 NodeType 있습니다. 속성 및 속성은 NameValue 현재 노드 또는 현재 레코드에 대해 다음 정보를 반환합니다.

    • 요소 이름 및 특성 이름인 노드 이름입니다.
    • 노드 텍스트인 노드 값입니다.

    열거형은 NodeType 노드 형식을 결정합니다. 다음 코드 샘플에서는 요소의 이름과 문서 형식을 표시합니다. 다음 코드 샘플에서는 요소 특성을 무시합니다.

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", 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("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  11. 특성을 검사합니다.

    요소 노드 형식에는 요소 노드 형식과 연결된 특성 노드 목록이 포함될 수 있습니다. 메서드는 MovetoNextAttribute 요소의 각 특성을 순차적으로 이동합니다. 사용 하 여는 HasAttributes 노드에 어떤 특성이 있는지 테스트 하는 속성입니다. 속성은 AttributeCount 현재 노드에 대한 특성 수를 반환합니다.

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
    
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                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("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  12. 솔루션을 저장합니다. 솔루션을 빌드합니다.

  13. Ctrl+F5를 눌러 샘플 애플리케이션을 실행합니다.

Visual Studio .NET 2002 또는 Visual Studio .NET 2003에서 전체 코드 목록 보기

#include "stdafx.h"
#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
    XmlTextReader* reader = new XmlTextReader ("books.xml");

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
  
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                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("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    Console::ReadLine();
}

참고

이전 코드 샘플을 성공적으로 컴파일하려면 Visual C++ 2005에서 공용 언어 런타임 지원 컴파일러 옵션(/clr:oldSyntax)을 추가해야 합니다. Visual C++ 2005에서 공용 언어 런타임 지원 컴파일러 옵션을 추가하려면 다음 단계를 수행합니다.

  1. 프로젝트를 클릭한 다음 ProjectName> 속성을 클릭합니다<.

    참고

    <ProjectName> 은 프로젝트 이름의 자리 표시자입니다.

  2. 구성 속성을 확장한 다음 일반을 클릭합니다.

  3. 오른쪽 창의 공용 언어 런타임 지원 프로젝트 설정에서 공용 언어 런타임 지원, 이전 구문(/clr:oldSyntax)을 클릭하여 선택하고 적용을 클릭한 다음 확인을 클릭합니다.

    공용 언어 런타임 지원 컴파일러 옵션에 대한 자세한 내용은 /clr(공용 언어 런타임 컴파일)을 참조하세요.

이러한 단계는 전체 문서에 적용됩니다.

샘플 출력 보기

<bookstore>
    <book genre='autobiography' publicationdate='1981' ISBN='1-861003-11-0'>
        <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 genre='novel' publicationdate='1967' ISBN='0-201-63361-2'>
        <title>
        The Confidence Man
        </title>
        <author>
            <first-name>
            Herman
            </first-name>
            <last-name>
            Melville
            </last-name>
        </author>
        <price>
        11.99
        </price>
    </book>
    <book genre='philosophy' publicationdate='1991' ISBN='1-861001-57-6'>
        <title>
        The Gorgias
        </title>
        <author>
            <name>
            Plato
            </name>
        </author>
        <price>
        9.99
        </price>
    </book>
</bookstore>

문제 해결

샘플 애플리케이션을 실행하면 다음 오류 메시지가 표시될 수 있습니다.

System.Xml 형식의 처리되지 않은 예외입니다. 추가 정보: 시스템 오류 System.xml.dll XmlException이 발생했습니다.

참조

XmlReader를 사용하여 XML을 읽는 방법에 대한 자세한 내용은 XmlReader를 사용하여 XML 읽기를 참조하세요.