File: System\Xml\Core\XmlTextReader.cs
Web Access
Project: src\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj (System.Private.Xml)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Runtime.Versioning;
using System.Text;
using System.Xml.Schema;
 
namespace System.Xml
{
    [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
    public class XmlTextReader : XmlReader, IXmlLineInfo, IXmlNamespaceResolver
    {
        //
        // Member fields
        //
        private readonly XmlTextReaderImpl _impl;
        //
        //
        // Constructors
        //
        protected XmlTextReader()
        {
            _impl = new XmlTextReaderImpl();
            _impl.OuterReader = this;
        }
 
        protected XmlTextReader(XmlNameTable nt)
        {
            _impl = new XmlTextReaderImpl(nt);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader(Stream input)
        {
            _impl = new XmlTextReaderImpl(input);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Uri)] string url, Stream input)
        {
            _impl = new XmlTextReaderImpl(url, input);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader(Stream input, XmlNameTable nt)
        {
            _impl = new XmlTextReaderImpl(input, nt);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Uri)] string url, Stream input, XmlNameTable nt)
        {
            _impl = new XmlTextReaderImpl(url, input, nt);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader(TextReader input)
        {
            _impl = new XmlTextReaderImpl(input);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Uri)] string url, TextReader input)
        {
            _impl = new XmlTextReaderImpl(url, input);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader(TextReader input, XmlNameTable nt)
        {
            _impl = new XmlTextReaderImpl(input, nt);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Uri)] string url, TextReader input, XmlNameTable nt)
        {
            _impl = new XmlTextReaderImpl(url, input, nt);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader(Stream xmlFragment, XmlNodeType fragType, XmlParserContext? context)
        {
            _impl = new XmlTextReaderImpl(xmlFragment, fragType, context);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Xml)] string xmlFragment, XmlNodeType fragType, XmlParserContext? context)
        {
            _impl = new XmlTextReaderImpl(xmlFragment, fragType, context);
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Uri)] string url)
        {
            _impl = new XmlTextReaderImpl(url, new NameTable());
            _impl.OuterReader = this;
        }
 
        public XmlTextReader([StringSyntax(StringSyntaxAttribute.Uri)] string url, XmlNameTable nt)
        {
            _impl = new XmlTextReaderImpl(url, nt);
            _impl.OuterReader = this;
        }
        //
        // XmlReader members
        //
        public override XmlNodeType NodeType
        {
            get { return _impl.NodeType; }
        }
 
        public override string Name
        {
            get { return _impl.Name; }
        }
 
        public override string LocalName
        {
            get { return _impl.LocalName; }
        }
 
        public override string NamespaceURI
        {
            get { return _impl.NamespaceURI; }
        }
 
        public override string Prefix
        {
            get { return _impl.Prefix; }
        }
 
        public override bool HasValue
        {
            get { return _impl.HasValue; }
        }
 
        public override string Value
        {
            get { return _impl.Value; }
        }
 
        public override int Depth
        {
            get { return _impl.Depth; }
        }
 
        public override string BaseURI
        {
            get { return _impl.BaseURI; }
        }
 
        public override bool IsEmptyElement
        {
            get { return _impl.IsEmptyElement; }
        }
 
        public override bool IsDefault
        {
            get { return _impl.IsDefault; }
        }
 
        public override char QuoteChar
        {
            get { return _impl.QuoteChar; }
        }
 
        public override XmlSpace XmlSpace
        {
            get { return _impl.XmlSpace; }
        }
 
        public override string XmlLang
        {
            get { return _impl.XmlLang; }
        }
 
        // XmlTextReader does not override SchemaInfo, ValueType and ReadTypeValue
 
        public override int AttributeCount { get { return _impl.AttributeCount; } }
 
        public override string? GetAttribute(string name)
        {
            return _impl.GetAttribute(name);
        }
 
        public override string? GetAttribute(string localName, string? namespaceURI)
        {
            return _impl.GetAttribute(localName, namespaceURI);
        }
 
        public override string GetAttribute(int i)
        {
            return _impl.GetAttribute(i);
        }
 
        public override bool MoveToAttribute(string name)
        {
            return _impl.MoveToAttribute(name);
        }
 
        public override bool MoveToAttribute(string localName, string? namespaceURI)
        {
            return _impl.MoveToAttribute(localName, namespaceURI);
        }
 
        public override void MoveToAttribute(int i)
        {
            _impl.MoveToAttribute(i);
        }
 
        public override bool MoveToFirstAttribute()
        {
            return _impl.MoveToFirstAttribute();
        }
 
        public override bool MoveToNextAttribute()
        {
            return _impl.MoveToNextAttribute();
        }
 
        public override bool MoveToElement()
        {
            return _impl.MoveToElement();
        }
 
        public override bool ReadAttributeValue()
        {
            return _impl.ReadAttributeValue();
        }
 
        public override bool Read()
        {
            return _impl.Read();
        }
 
        public override bool EOF
        {
            get { return _impl.EOF; }
        }
 
        public override void Close()
        {
            _impl.Close();
        }
 
        public override ReadState ReadState
        {
            get { return _impl.ReadState; }
        }
 
        public override void Skip()
        {
            _impl.Skip();
        }
 
        public override XmlNameTable NameTable
        {
            get { return _impl.NameTable; }
        }
 
        public override string? LookupNamespace(string prefix)
        {
            string? ns = _impl.LookupNamespace(prefix);
            if (ns != null && ns.Length == 0)
            {
                ns = null;
            }
            return ns;
        }
 
        public override bool CanResolveEntity
        {
            get { return true; }
        }
 
        public override void ResolveEntity()
        {
            _impl.ResolveEntity();
        }
 
        // Binary content access methods
        public override bool CanReadBinaryContent
        {
            get { return true; }
        }
 
        public override int ReadContentAsBase64(byte[] buffer, int index, int count)
        {
            return _impl.ReadContentAsBase64(buffer, index, count);
        }
 
        public override int ReadElementContentAsBase64(byte[] buffer, int index, int count)
        {
            return _impl.ReadElementContentAsBase64(buffer, index, count);
        }
 
        public override int ReadContentAsBinHex(byte[] buffer, int index, int count)
        {
            return _impl.ReadContentAsBinHex(buffer, index, count);
        }
 
        public override int ReadElementContentAsBinHex(byte[] buffer, int index, int count)
        {
            return _impl.ReadElementContentAsBinHex(buffer, index, count);
        }
 
        // Text streaming methods
 
        // XmlTextReader does do support streaming of Value (there are backwards compatibility issues when enabled)
        public override bool CanReadValueChunk
        {
            get { return false; }
        }
 
        // Overridden helper methods
 
        public override string ReadString()
        {
            _impl.MoveOffEntityReference();
            return base.ReadString();
        }
 
        //
        // IXmlLineInfo members
        //
        public bool HasLineInfo() { return true; }
 
        public int LineNumber { get { return _impl.LineNumber; } }
 
        public int LinePosition { get { return _impl.LinePosition; } }
 
        //
        // IXmlNamespaceResolver members
        //
        IDictionary<string, string> IXmlNamespaceResolver.GetNamespacesInScope(XmlNamespaceScope scope)
        {
            return _impl.GetNamespacesInScope(scope);
        }
 
        string? IXmlNamespaceResolver.LookupNamespace(string prefix)
        {
            return _impl.LookupNamespace(prefix);
        }
 
        string? IXmlNamespaceResolver.LookupPrefix(string namespaceName)
        {
            return _impl.LookupPrefix(namespaceName);
        }
 
        // FXCOP: ExplicitMethodImplementationsInUnsealedClassesHaveVisibleAlternates
        // public versions of IXmlNamespaceResolver methods, so that XmlTextReader subclasses can access them
        public IDictionary<string, string> GetNamespacesInScope(XmlNamespaceScope scope)
        {
            return _impl.GetNamespacesInScope(scope);
        }
 
        //
        // XmlTextReader
        //
        public bool Namespaces
        {
            get { return _impl.Namespaces; }
            set { _impl.Namespaces = value; }
        }
 
        public bool Normalization
        {
            get { return _impl.Normalization; }
            set { _impl.Normalization = value; }
        }
 
        public Encoding? Encoding
        {
            get { return _impl.Encoding; }
        }
 
        public WhitespaceHandling WhitespaceHandling
        {
            get { return _impl.WhitespaceHandling; }
            set { _impl.WhitespaceHandling = value; }
        }
 
        [Obsolete("XmlTextReader.ProhibitDtd has been deprecated. Use DtdProcessing instead.")]
        public bool ProhibitDtd
        {
            get { return _impl.DtdProcessing == DtdProcessing.Prohibit; }
            set { _impl.DtdProcessing = value ? DtdProcessing.Prohibit : DtdProcessing.Parse; }
        }
 
        public DtdProcessing DtdProcessing
        {
            get { return _impl.DtdProcessing; }
            set { _impl.DtdProcessing = value; }
        }
 
        public EntityHandling EntityHandling
        {
            get { return _impl.EntityHandling; }
            set { _impl.EntityHandling = value; }
        }
 
        public XmlResolver? XmlResolver
        {
            set { _impl.XmlResolver = value; }
        }
 
        public void ResetState()
        {
            _impl.ResetState();
        }
 
        public TextReader GetRemainder()
        {
            return _impl.GetRemainder();
        }
 
        public int ReadChars(char[] buffer, int index, int count)
        {
            return _impl.ReadChars(buffer, index, count);
        }
 
        public int ReadBase64(byte[] array, int offset, int len)
        {
            return _impl.ReadBase64(array, offset, len);
        }
 
        public int ReadBinHex(byte[] array, int offset, int len)
        {
            return _impl.ReadBinHex(array, offset, len);
        }
        //
        // Internal helper methods
        //
        internal XmlTextReaderImpl Impl
        {
            get { return _impl; }
        }
 
        internal override XmlNamespaceManager? NamespaceManager
        {
            get { return _impl.NamespaceManager; }
        }
 
        // NOTE: System.Data.SqlXml.XmlDataSourceResolver accesses this property via reflection
        internal bool XmlValidatingReaderCompatibilityMode
        {
            set { _impl.XmlValidatingReaderCompatibilityMode = value; }
        }
 
        internal override IDtdInfo? DtdInfo
        {
            get { return _impl.DtdInfo; }
        }
    }
}