internal NavigatorInput ResolveDocument(string relativeUri) { Debug.Assert(this.xmlResolver != null); string baseUri = this.Input.BaseURI; Uri ruri = this.xmlResolver.ResolveUri((baseUri != String.Empty) ? this.xmlResolver.ResolveUri(null, baseUri) : null, relativeUri); object input = this.xmlResolver.GetEntity(ruri, null, null); string resolved = ruri.ToString(); if (input is Stream) { XmlTextReader tr = new XmlTextReader(resolved, (Stream)input); { tr.XmlResolver = this.xmlResolver; } // reader is closed by XslTransform.LoadDocument() return(new NavigatorInput(XslTransform.LoadDocument(tr), resolved, rootScope)); } else if (input is XPathNavigator) { return(new NavigatorInput((XPathNavigator)input, resolved, rootScope)); } else { throw new XsltException(Res.Xslt_CantResolve, relativeUri); } }
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) { XmlTextReader tr = new XmlTextReader(ruri.ToString(), (Stream)input); { tr.XmlResolver = this.resolver; } // reader is closed by XslTransform.LoadDocument() result = ((IXPathNavigable)XslTransform.LoadDocument(tr)).CreateNavigator(); } else if (input is XPathNavigator) { result = (XPathNavigator)input; } else { throw new XsltException(Res.Xslt_CantResolve, ruri.ToString()); } documentCache[ruri] = result.Clone(); return(result); }