다음을 통해 공유


System.Xml.XmlTextReader 클래스

이 문서는 이 API에 대한 참조 설명서를 보충하는 추가 설명을 제공합니다.

비고

새 기능을 활용하기 위해 XmlReader 메서드를 사용하여 XmlReader.Create 인스턴스를 만드는 것이 좋습니다.

XmlTextReader 는 XML 데이터 스트림에 대한 전달 전용 읽기 전용 액세스를 제공합니다. 현재 노드는 판독기 위치가 있는 노드를 나타냅니다. 판독기는 읽기 메서드를 사용하여 고급이며 속성은 현재 노드의 값을 반영합니다.

이 클래스는 XmlReader W3C XML(Extensible Markup Language) 1.0 및 XML 권장 사항의 네임스페이스를 구현하고 준수합니다. XmlTextReader 에서는 다음 기능을 제공합니다.

  • 올바른 형식의 XML 규칙을 적용합니다.

  • XmlTextReader 는 데이터 유효성 검사를 제공하지 않습니다.

  • 노드의 형식이 DocumentType 올바른지 확인합니다. XmlTextReader 는 DTD의 형식이 올바른지 검사하지만 DTD를 사용하여 유효성을 검사하지는 않습니다.

  • NodeTypeXmlNodeType.EntityReference인 노드의 경우, 빈 EntityReference 노드 하나가 반환됩니다 (즉, Value 속성이 String.Empty이다).

비고

DTD에서 엔터티의 실제 선언을 노드라고 Entity 합니다. 데이터에서 이러한 노드를 참조할 때, 그것들은 EntityReference 노드라고 불립니다.

  • 기본 특성을 확장하지 않습니다.

XmlTextReader는 데이터 유효성 검사에 필요한 추가 검사를 수행하지 않기 때문에, 빠른 올바른 형식의 파서를 제공합니다.

데이터 유효성 검사를 수행하려면 유효성 XmlReader검사를 사용합니다.

XmlDocument에서 XML 데이터를 읽으려면 XmlNodeReader를 사용합니다.

XmlTextReader는 XML 구문 분석 오류 시 XmlException을(를) 발생시킵니다. 예외가 throw된 후에는 판독기의 상태를 예측할 수 없습니다. 예를 들어 보고된 노드 형식은 현재 노드의 실제 노드 형식과 다를 수 있습니다. 이 ReadState 속성을 사용하여 판독기가 오류 상태인지 확인합니다.

보안 고려 사항

다음은 클래스를 사용할 때 고려해야 할 사항입니다 XmlTextReader .

  • XmlTextReader에서 발생한 예외는 애플리케이션에 공개하기를 원하지 않는 경로 정보를 노출할 수 있습니다. 애플리케이션은 예외를 포착하고 적절하게 처리해야 합니다.

  • DTD 처리는 기본적으로 사용하도록 설정됩니다. 서비스 거부 문제가 우려되거나 신뢰할 수 없는 원본을 처리하는 경우 DTD 처리를 사용하지 않도록 설정합니다. DTD 처리를 사용하지 않도록 DtdProcessing 속성을 Prohibit로 설정합니다.

    DTD 처리가 활성화된 경우, XmlSecureResolver을(를) 사용하여 XmlTextReader이(가) 접근할 수 있는 리소스를 제한할 수 있습니다. XML 처리가 메모리 및 시간이 제한되도록 애플리케이션을 디자인할 수도 있습니다. 예를 들어 ASP.NET 애플리케이션에서 제한 시간을 구성합니다.

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

  • XML 데이터에는 많은 수의 특성, 네임스페이스 선언, 중첩된 요소 등이 포함될 수 있으며, 이를 처리하려면 상당한 시간이 필요합니다. 입력의 크기를 제한하려면, XmlTextReader에 전송하기 위해 사용자 지정 IStream 구현을 만들고 이를 XmlTextReader에 제공합니다.

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

  • 기본적으로 일반 엔터티는 확장되지 않습니다. 메서드를 호출하면 일반 엔터티가 ResolveEntity 확장됩니다.