private void FinishInitTextReader() { // init ParsingState InitTextReaderInput(_reportedBaseUri, _laterInitParam.inputTextReader); _reportedEncoding = _ps.encoding; // parse DTD if (_laterInitParam.inputContext != null && _laterInitParam.inputContext.HasDtdInfo) { ProcessDtdFromParserContext(_laterInitParam.inputContext); } _laterInitParam = null; }
private void FinishInitStream() { Encoding enc = null; // get Encoding from XmlParserContext if (_laterInitParam.inputContext != null) { enc = _laterInitParam.inputContext.Encoding; } // init ParsingState InitStreamInput(_laterInitParam.inputbaseUri, _reportedBaseUri, _laterInitParam.inputStream, _laterInitParam.inputBytes, _laterInitParam.inputByteCount, enc); _reportedEncoding = _ps.encoding; // parse DTD if (_laterInitParam.inputContext != null && _laterInitParam.inputContext.HasDtdInfo) { ProcessDtdFromParserContext(_laterInitParam.inputContext); } _laterInitParam = null; }
// Initializes a new instance of the XmlTextReaderImpl class with the specified arguments. // This constructor is used when creating XmlTextReaderImpl via XmlReader.Create internal XmlTextReaderImpl(TextReader input, XmlReaderSettings settings, string baseUriStr, XmlParserContext context) : this(settings.GetXmlResolver(), settings, context) { // get BaseUri from XmlParserContext if (context != null) { Debug.Assert(baseUriStr == string.Empty, "BaseURI can come either from XmlParserContext or from the constructor argument, not from both"); if (context.BaseURI != null) { baseUriStr = context.BaseURI; } } _reportedBaseUri = baseUriStr; _closeInput = settings.CloseInput; _laterInitParam = new LaterInitParam(); _laterInitParam.inputTextReader = input; _laterInitParam.inputContext = context; _laterInitParam.initType = InitInputType.TextReader; if (!settings.Async) { //if not set Async flag, finish the init in create stage. FinishInitTextReader(); } else { _laterInitParam.useAsync = true; } }
// Initializes a new instance of the XmlTextReaderImpl class with the specified arguments. // This constructor is used when creating XmlTextReaderImpl via XmlReader.Create internal XmlTextReaderImpl(Stream stream, byte[] bytes, int byteCount, XmlReaderSettings settings, Uri baseUri, string baseUriStr, XmlParserContext context, bool closeInput) : this(settings.GetXmlResolver(), settings, context) { // get BaseUri from XmlParserContext if (context != null) { if (context.BaseURI != null && context.BaseURI.Length > 0 && !UriEqual(baseUri, baseUriStr, context.BaseURI, settings.GetXmlResolver())) { if (baseUriStr.Length > 0) { Throw(SR.Xml_DoubleBaseUri); } Debug.Assert(baseUri == null); baseUriStr = context.BaseURI; } } _reportedBaseUri = baseUriStr; _closeInput = closeInput; _laterInitParam = new LaterInitParam(); _laterInitParam.inputStream = stream; _laterInitParam.inputBytes = bytes; _laterInitParam.inputByteCount = byteCount; _laterInitParam.inputbaseUri = baseUri; _laterInitParam.inputContext = context; _laterInitParam.initType = InitInputType.Stream; if (!settings.Async) { //if not set Async flag, finish the init in create stage. FinishInitStream(); } else { _laterInitParam.useAsync = true; } }
private void FinishInitUriString() { Stream stream = null; if (_laterInitParam.useAsync) { //this will be hit when user create a XmlReader by setting Async, but the first call is Read() instead of ReadAsync(), //then we still should create an async stream here. And wait for the method finish. System.Threading.Tasks.Task<object> t = _laterInitParam.inputUriResolver.GetEntityAsync(_laterInitParam.inputbaseUri, string.Empty, typeof(Stream)); t.Wait(); stream = (Stream)t.Result; } else { stream = (Stream)_laterInitParam.inputUriResolver.GetEntity(_laterInitParam.inputbaseUri, string.Empty, typeof(Stream)); } if (stream == null) { throw new XmlException(SR.Xml_CannotResolveUrl, _laterInitParam.inputUriStr); } Encoding enc = null; // get Encoding from XmlParserContext if (_laterInitParam.inputContext != null) { enc = _laterInitParam.inputContext.Encoding; } try { // init ParsingState InitStreamInput(_laterInitParam.inputbaseUri, _reportedBaseUri, stream, null, 0, enc); _reportedEncoding = _ps.encoding; // parse DTD if (_laterInitParam.inputContext != null && _laterInitParam.inputContext.HasDtdInfo) { ProcessDtdFromParserContext(_laterInitParam.inputContext); } } catch { stream.Dispose(); throw; } _laterInitParam = null; }
// Initializes a new instance of the XmlTextReaderImpl class with the specified arguments. // This constructor is used when creating XmlTextReaderImpl via XmlReader.Create internal XmlTextReaderImpl(string uriStr, XmlReaderSettings settings, XmlParserContext context, XmlResolver uriResolver) : this(settings.GetXmlResolver(), settings, context) { Uri baseUri = uriResolver.ResolveUri(null, uriStr); string baseUriStr = baseUri.ToString(); // get BaseUri from XmlParserContext if (context != null) { if (context.BaseURI != null && context.BaseURI.Length > 0 && !UriEqual(baseUri, baseUriStr, context.BaseURI, settings.GetXmlResolver())) { if (baseUriStr.Length > 0) { Throw(SR.Xml_DoubleBaseUri); } Debug.Assert(baseUri == null); baseUriStr = context.BaseURI; } } _reportedBaseUri = baseUriStr; _closeInput = true; _laterInitParam = new LaterInitParam(); _laterInitParam.inputUriStr = uriStr; _laterInitParam.inputbaseUri = baseUri; _laterInitParam.inputContext = context; _laterInitParam.inputUriResolver = uriResolver; _laterInitParam.initType = InitInputType.UriString; if (!settings.Async) { //if not set Async flag, finish the init in create stage. FinishInitUriString(); } else { _laterInitParam.useAsync = true; } }
internal void Close(bool closeInput) { if (_parsingFunction == ParsingFunction.ReaderClosed) { return; } while (InEntity) { PopParsingState(); } _ps.Close(closeInput); _curNode = NodeData.None; _parsingFunction = ParsingFunction.ReaderClosed; _reportedEncoding = null; _reportedBaseUri = string.Empty; _readState = ReadState.Closed; _fullAttrCleanup = false; ResetAttributes(); _laterInitParam = null; }
private void FinishInitUriString() { Stream stream = (Stream)_laterInitParam.inputUriResolver.GetEntity(_laterInitParam.inputbaseUri, string.Empty, typeof(Stream)); if (stream == null) { throw new XmlException(SR.Xml_CannotResolveUrl, _laterInitParam.inputUriStr); } Encoding enc = null; // get Encoding from XmlParserContext if (_laterInitParam.inputContext != null) { enc = _laterInitParam.inputContext.Encoding; } try { // init ParsingState InitStreamInput(_laterInitParam.inputbaseUri, _reportedBaseUri, stream, null, 0, enc); _reportedEncoding = _ps.encoding; // parse DTD if (_laterInitParam.inputContext != null && _laterInitParam.inputContext.HasDtdInfo) { ProcessDtdFromParserContext(_laterInitParam.inputContext); } } catch { stream.Dispose(); throw; } _laterInitParam = null; }