다음을 통해 공유


Visual C#을 사용하여 URL에서 XML 데이터 읽기

이 문서에서는 클래스를 사용하여 XmlTextReader URL에서 XML을 읽는 방법을 보여줍니다. 스트리밍된 정보는 서버, 파일 또는 TextReader 클래스의 바이트 스트림과 같은 모든 종류의 원본에서 올 수 있습니다.

원래 제품 버전: Visual Studio
원래 KB 번호: 307643

요구 사항

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

  • Microsoft Visual Studio
  • XML 용어
  • XML 만들기 및 읽기
  • URL 및 XML 엔드포인트 만들기

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

URL에서 XML 데이터를 읽는 방법

이 예제에서는 Books.xml이라는 파일을 사용합니다. 고유한 Books.xml 파일을 만들거나 .NET SDK(소프트웨어 개발 키트) 빠른 시작에 포함된 샘플 파일을 사용할 수 있습니다. 이 파일은 다운로드할 수도 있습니다. 다운로드 위치는 이 문서의 참조 섹션에 있는 첫 번째 항목을 참조하세요.

  1. Books.xml 파일을 컴퓨터의 \Inetpub\Wwwroot 폴더에 복사합니다.

  2. Visual Studio를 엽니다.

  3. 새 Visual C# 콘솔 애플리케이션을 만듭니다. 코드 목록 완료 섹션을 계속 진행하거나 다음 단계를 계속 진행하여 애플리케이션을 빌드할 수 있습니다.

  4. 코드의 뒷부분에서 클래스 선언을 System.Xml 한정할 필요가 없도록 네임스페이 XmlTextReader 스에서 using 지시문을 지정합니다. 다른 선언 앞에 using 지시문을 사용해야 합니다.

    using System.Xml;
    
  5. URL을 사용하여 XML 스트림을 검색합니다. 스트림은 디바이스의 독립성 제공에 사용됩니다. 따라서 스트림의 원본이 변경되는 경우 프로그램 변경이 필요하지 않습니다. URL에 대한 상수를 선언합니다 http://localhost/books.xml . 다음 단계에서 상수를 와 함께 XmlTextReader사용합니다. 기본 클래스의 기본 프로시저에 다음 코드 샘플을 추가합니다.

    String URLString = "http://localhost/books.xml";
    
  6. 클래스의 XmlTextReader instance 만들고 URL을 지정합니다. 일반적으로 는 XmlTextReader DOM(문서 개체 모델)의 오버헤드 없이 원시 데이터로 XML에 액세스해야 하는 경우에 사용되므로 XmlTextReader XML을 읽기 위한 더 빠른 메커니즘을 제공합니다. 클래스에는 XmlTextReader XML 데이터의 위치를 지정하는 다른 생성자가 있습니다. 다음 코드는 개체의 XmlTextReader instance 만들고 URL을 생성자에 전달합니다.

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. XML을 읽습니다.

    참고

    이 단계에서는 기본 외부 루프를 while 보여 하며, 다음 두 단계에서는 해당 루프를 사용하고 XML을 읽는 방법을 설명합니다.

    로드된 XmlTextReader 후 순차적 읽기를 수행하여 XML 데이터 간에 이동하고 메서드를 Read 사용하여 다음 레코드를 가져옵니다. 메서드는 Read 더 이상 레코드가 없으면 false를 반환합니다.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. 노드를 검사합니다. XML 데이터를 처리하기 위해 각 레코드에는 속성에서 확인할 수 있는 노드 형식이 NodeType 있습니다. 및 Value 속성은 Name 현재 노드(또는 레코드)의 노드 이름(요소 및 특성 이름) 및 노드 값(노드 텍스트)을 반환합니다. 열거형은 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;
        }
    }
    
  9. 특성을 검사합니다. 요소 노드 형식에는 연결된 특성 노드 목록이 포함될 수 있습니다. 메서드는 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;
        }
    }
    
  10. 프로젝트를 빌드하고 실행합니다.

전체 코드 목록

using System;
using System.Xml;

namespace ReadXMLfromURL
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);

            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;
                }
            }
        }
    }
}

예제 출력

<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 형식의 처리되지 않은 예외입니다. XmlException이 system.xml.dll 추가 정보: 예기치 않은 XML 선언에서 발생했습니다. XML 선언은 문서의 첫 번째 노드여야 하며 앞에 공백 문자를 표시할 수 없습니다. 줄 1, 위치 4.

예외 오류는 다음 코드 줄에서 발생합니다.

while (reader.Read())

예외 오류를 resolve Books.xml문서의 첫 번째 노드 앞에 오는 공백 문자를 제거합니다.

참조