internal XPathNavigator GetNavigator(Uri ruri) { XPathNavigator?result = null; if (_documentCache != null) { result = _documentCache[ruri] as XPathNavigator; if (result != null) { return(result.Clone()); } } else { _documentCache = new Hashtable(); } object?input = _resolver.GetEntity(ruri, null, null); if (input is Stream) { XmlTextReaderImpl tr = new XmlTextReaderImpl(ruri.ToString(), (Stream)input); { tr.XmlResolver = _resolver; } // reader is closed by Compiler.LoadDocument() result = ((IXPathNavigable)Compiler.LoadDocument(tr)).CreateNavigator(); } else if (input is XPathNavigator) { result = (XPathNavigator)input; } else { throw XsltException.Create(SR.Xslt_CantResolve, ruri.ToString()); } _documentCache[ruri] = result !.Clone(); return(result); }
internal NavigatorInput ResolveDocument(Uri absoluteUri) { Debug.Assert(this.xmlResolver != null); object input = this.xmlResolver.GetEntity(absoluteUri, null, null); string resolved = absoluteUri.ToString(); if (input is Stream) { XmlTextReaderImpl tr = new XmlTextReaderImpl(resolved, (Stream)input); { tr.XmlResolver = this.xmlResolver; } // reader is closed by Compiler.LoadDocument() return(new NavigatorInput(Compiler.LoadDocument(tr).CreateNavigator(), resolved, rootScope)); } else if (input is XPathNavigator) { return(new NavigatorInput((XPathNavigator)input, resolved, rootScope)); } else { throw XsltException.Create(Res.Xslt_CantResolve, resolved); } }