Inheritance: System.Xml.XmlWrappingReader
Exemple #1
0
        /// <summary>
        /// Ensure that "dataSource" is cached as an XPathDocument and return a navigator over the document.
        /// </summary>
        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, _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, _wsRules), XmlSpace.Preserve).CreateNavigator());
            }
            else if (dataSource is IXPathNavigable)
            {
                if (_wsRules != null)
                {
                    throw new XslTransformException(SR.XmlIl_CantStripNav, string.Empty);
                }

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

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