Share via


System.Xml.XmlTextReader 클래스

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

참고 항목

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

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검사를 사용합니다.

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

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

보안 고려 사항

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

  • Throw 된 예외는 XmlTextReader 애플리케이션에 버블링 하지 않을 경로 정보가 노출 될 수 있습니다. 애플리케이션에서는 예외를 캐치하고 적절히 처리해야 합니다.

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

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

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

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

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

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