System.Xml.Xsl.Runtime.XmlQueryContext.ConstructDocument C# (CSharp) Method

ConstructDocument() private method

Ensure that "dataSource" is cached as an XPathDocument and return a navigator over the document.
private ConstructDocument ( object dataSource, string uriRelative, Uri uriResolved ) : XPathNavigator
dataSource object
uriRelative string
uriResolved System.Uri
return System.Xml.XPath.XPathNavigator
        private XPathNavigator ConstructDocument(object dataSource, string uriRelative, Uri uriResolved) {
            Debug.Assert(dataSource != null, "GetType() below assumes dataSource is not null");
            Stream stream = dataSource as Stream;
            if (stream != null) {
                // Create document from stream
                XmlReader reader = readerSettings.CreateReader(stream, uriResolved != null ? uriResolved.ToString() : null);

                try {
                    // Create WhitespaceRuleReader if whitespace should be stripped
                    return new XPathDocument(WhitespaceRuleReader.CreateReader(reader, this.wsRules), XmlSpace.Preserve).CreateNavigator();
                }
                finally {
                    // Always close reader that was opened here
                    reader.Close();
                }
            }
            else if (dataSource is XmlReader) {
                // Create document from reader
                // Create WhitespaceRuleReader if whitespace should be stripped
                return new XPathDocument(WhitespaceRuleReader.CreateReader(dataSource as XmlReader, this.wsRules), XmlSpace.Preserve).CreateNavigator();
            }
            else if (dataSource is IXPathNavigable) {
                if (this.wsRules != null)
                    throw new XslTransformException(Res.XmlIl_CantStripNav, string.Empty);

                return (dataSource as IXPathNavigable).CreateNavigator();
            }

            Debug.Assert(uriRelative != null, "Relative URI should not be null");
            throw new XslTransformException(Res.XmlIl_CantResolveEntity, uriRelative, dataSource.GetType().ToString());
        }