다음을 통해 공유


XmlReader 클래스

빠르고, 캐시되지 않으며 앞으로만 이동 가능한 XML 데이터 액세스를 제공하는 판독기를 나타냅니다.

네임스페이스: System.Xml
어셈블리: System.Xml(system.xml.dll)

구문

‘선언
Public MustInherit Class XmlReader
    Implements IDisposable
‘사용 방법
Dim instance As XmlReader
public abstract class XmlReader : IDisposable
public ref class XmlReader abstract : IDisposable
public abstract class XmlReader implements IDisposable
public abstract class XmlReader implements IDisposable

설명

XmlReader는 XML 데이터의 스트림에 대해 앞으로만 이동 가능한 읽기 전용 액세스를 제공합니다. XmlReader 클래스는 W3C XML(Extensible Markup Language) 1.0 및 Namespaces in XML 권장 사항을 준수합니다.

현재 노드란 판독기가 배치된 노드를 말합니다. 판독기는 읽기 메서드를 사용해 앞으로 이동하며, 속성은 현재 노드의 값을 반영합니다.

중요

Microsoft .NET Framework에는 XmlReader 클래스에서 구현된 XmlTextReader, XmlNodeReaderXmlValidatingReader 클래스 등이 있지만 2.0 릴리스에서는 Create 메서드를 사용하여 XmlReader 인스턴스를 만드는 방법이 권장됩니다. 자세한 내용은 XML 판독기 만들기를 참조하십시오.

XmlReader는 XML 구문 분석 오류에 대해 XmlException을 throw합니다. 예외가 throw되면 판독기 상태는 예측할 수 없습니다. 예를 들어, 보고된 노드 형식은 현재 노드의 실제 노드 형식과 다를 수 있습니다. ReadState 속성을 사용하여 판독기에 오류가 있는지 확인합니다.

XmlReader 클래스에 대한 자세한 내용은 XmlReader로 XML 읽기를 참조하십시오.

보안 고려 사항

XmlReader 클래스를 사용할 때는 다음 사항을 고려해야 합니다.

  • 응용 프로그램에 버블링하지 않을 경로 정보가 XmlReader에서 throw하는 예외에 의해 노출될 수 있습니다. 응용 프로그램에서 예외를 catch하여 적절하게 처리해야 합니다.

  • 서비스 거부 문제가 염려되거나 신뢰할 수 없는 소스를 처리하는 경우 DTD 처리를 사용하지 마십시오. Create 메서드로 생성되는 XmlReader 개체에는 기본적으로 DTD 처리를 사용하지 않도록 설정됩니다.

    DTD 처리를 사용하도록 설정한 경우 XmlSecureResolver를 사용하여 XmlReader에서 액세스 가능한 리소스를 제한할 수 있습니다. 또한 XML 처리에 제한된 메모리와 시간이 사용되도록 응용 프로그램을 직접 디자인할 수 있습니다. 예를 들어 ASP.NET 응용 프로그램에서 시간 제한 설정을 구성할 수 있습니다.

  • XML 데이터에는 스키마 파일과 같은 외부 리소스에 대한 참조가 포함될 수 있습니다. 기본적으로 외부 리소스는 사용자 자격 증명이 없는 XmlUrlResolver 개체를 사용하여 확인됩니다. 이러한 경우 다음 중 하나를 수행하여 보안을 강화할 수 있습니다.

    • XmlReaderSettings.XmlResolver 속성을 XmlSecureResolver 개체로 설정하여 XmlReader에서 액세스 가능한 리소스를 제한합니다.

    • XmlReaderSettings.XmlResolver 속성을 Null 참조(Visual Basic의 경우 Nothing)로 설정하여 XmlReader에서 외부 리소스를 열 수 없도록 합니다.

  • XML 데이터에는 처리하는 데 시간이 오래 걸리는 특성, 네임스페이스 선언, 중첩된 요소 등이 많이 포함될 수 있습니다. XmlReader로 보내는 입력 크기를 제한하려면 사용자 지정 IStream 구현을 만들어 XmlReader에 제공합니다.

  • ReadValueChunk 메서드를 사용하여 큰 데이터 스트림을 처리할 수 있습니다. 이 메서드는 전체 값에 대해 단일 문자열을 할당하는 대신 한 번에 적은 수의 문자를 읽습니다.

  • 고유 로컬 이름, 네임스페이스 또는 접두사를 많이 포함하는 XML 문서를 읽을 때 문제가 발생할 수 있습니다. XmlReader에서 파생되는 클래스를 사용할 경우 각 항목에 대해 LocalName, Prefix 또는 NamespaceUri 속성을 호출하면 반환된 문자열이 NameTable에 추가됩니다. NameTable에 포함된 컬렉션은 크기가 줄지 않아 문자열 핸들의 가상 "메모리 누수"를 일으킵니다. NameTable 클래스에서 파생시키고 최대 크기 할당량을 적용하여 이를 완화할 수 있습니다. 이 컬렉션이 꽉 찰 때 NameTable을 사용할 수 없게 하거나 NameTable을 전환할 수 없습니다. 가능한 경우 위에서 설명한 속성 대신 IsStartElement 메서드와 함께 MoveToAttribute 메서드를 사용하여 이를 완화할 수도 있습니다. 이들 메서드는 문자열을 반환하지 않으므로 NameTable 컬렉션이 초과하여 채워지지 않습니다.

상속 계층 구조

System.Object
  System.Xml.XmlReader
     System.Xml.XmlNodeReader
     System.Xml.XmlTextReader
     System.Xml.XmlValidatingReader

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

XmlReader 멤버
System.Xml 네임스페이스

기타 리소스

XML 문서 및 데이터
보안 및 System.Xml 응용 프로그램