Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }