コード例 #1
0
        /// <summary>
        /// Parses the stream asynchronously with option to cancel.
        /// </summary>
        public async Task <IHtmlDocument> ParseAsync(Stream source, CancellationToken cancel)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);

            return(await parser.ParseAsync(_options, cancel).ConfigureAwait(false));
        }
コード例 #2
0
        internal DocumentFragment(Element context, String html)
            : this(context.Owner)
        {
            var source   = new TextSource(html);
            var document = new HtmlDocument(Owner.Context, source);
            var parser   = new HtmlDomBuilder(document);
            var options  = new HtmlParserOptions
            {
                IsEmbedded   = false,
                IsStrictMode = false,
                IsScripting  = Owner.Options.IsScripting()
            };
            var root = parser.ParseFragment(options, context).DocumentElement;

            while (root.HasChildNodes)
            {
                var child = root.FirstChild;
                root.RemoveChild(child);
                if (child is Node)
                {
                    Owner.AdoptNode(child);
                    InsertBefore((Node)child, null, false);
                }
            }
        }
コード例 #3
0
ファイル: HtmlDocument.cs プロジェクト: mganss/AngleSharp
        /// <summary>
        /// Loads the document in the provided context from the given response.
        /// </summary>
        /// <param name="context">The browsing context.</param>
        /// <param name="response">The response to consider.</param>
        /// <param name="contentType">The content type of the response.</param>
        /// <param name="source">The source to use.</param>
        /// <param name="cancelToken">Token for cancellation.</param>
        /// <returns>The task that builds the document.</returns>
        internal async static Task <HtmlDocument> LoadAsync(IBrowsingContext context, IResponse response, MimeType contentType, TextSource source, CancellationToken cancelToken)
        {
            var document = new HtmlDocument(context, source);
            var evt      = new HtmlParseStartEvent(document);
            var config   = context.Configuration;
            var events   = config.Events;
            var parser   = new HtmlDomBuilder(document);

            document.ContentType = contentType.Content;
            document.Referrer    = response.Headers.GetOrDefault(HeaderNames.Referer, String.Empty);
            document.DocumentUri = response.Address.Href;
            document.Cookie      = response.Headers.GetOrDefault(HeaderNames.SetCookie, String.Empty);
            document.ReadyState  = DocumentReadyState.Loading;
            context.NavigateTo(document);

            if (events != null)
            {
                events.Publish(evt);
            }

            var options = new HtmlParserOptions {
                IsScripting = config.IsScripting()
            };
            await parser.ParseAsync(options, cancelToken).ConfigureAwait(false);

            evt.FireEnd();
            return(document);
        }
コード例 #4
0
ファイル: HtmlDocument.cs プロジェクト: neelendu/AngleSharp
        /// <summary>
        /// Loads the document in the provided context from the given response.
        /// </summary>
        /// <param name="context">The browsing context.</param>
        /// <param name="options">The creation options to consider.</param>
        /// <param name="cancelToken">Token for cancellation.</param>
        /// <returns>The task that builds the document.</returns>
        internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken)
        {
            var document      = new HtmlDocument(context, options.Source);
            var evt           = new HtmlParseStartEvent(document);
            var config        = context.Configuration;
            var events        = config.Events;
            var parser        = new HtmlDomBuilder(document);
            var parserOptions = new HtmlParserOptions
            {
                IsScripting = config.IsScripting()
            };

            document.Setup(options);
            context.NavigateTo(document);

            if (events != null)
            {
                events.Publish(evt);
            }

            await parser.ParseAsync(parserOptions, cancelToken).ConfigureAwait(false);

            evt.FireEnd();
            return(document);
        }
コード例 #5
0
        /// <summary>
        /// Parses the stream and returns the result.
        /// </summary>
        public IHtmlDocument Parse(Stream source)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);

            return(parser.Parse(_options));
        }
コード例 #6
0
        public void When_read_a_simple_tag()
        {
            var sourceCode = " dada\n<div class=\"login box1\" id=\"div1\" data-tooltip=\"salut, ça va?\">login: \n\t romcy</div>"
                             + "<img src=\"http://popo.fr/titi.gif\" />";

            var codeReader        = new CodeReader(sourceCode);
            var declarationReader = new HtmlDeclarationReader(codeReader);
            var domBuilder        = new HtmlDomBuilder(declarationReader);

            var elements = domBuilder.BuildDom().ToList();

            Assert.AreEqual(3, elements.Count);

            Assert.AreEqual(" dada\n", elements[0].InnerText);
            Assert.IsEmpty(elements[0].Name);

            Assert.AreEqual("div", elements[1].Name);
            Assert.AreEqual(3, elements[1].Attributes.Count);
            Assert.AreEqual("login box1", elements[1].Attributes["class"]);
            Assert.AreEqual("div1", elements[1].Attributes["id"]);
            Assert.AreEqual("salut, ça va?", elements[1].Attributes["data-tooltip"]);

            Assert.AreEqual("login: \n\t romcy", elements[1].InnerText);

            Assert.AreEqual(1, elements[1].Children.Count);
            Assert.IsEmpty(elements[1].Children[0].Name);
            Assert.AreEqual("login: \n\t romcy", elements[1].Children[0].InnerText);

            Assert.AreEqual("img", elements[2].Name);
            Assert.AreEqual(1, elements[2].Attributes.Count);
            Assert.AreEqual("http://popo.fr/titi.gif", elements[2].Attributes["src"]);
            Assert.AreEqual(0, elements[2].Children.Count);
        }
コード例 #7
0
        /// <summary>
        /// Parses the string and returns the result.
        /// </summary>
        public IHtmlDocument Parse(String source)
        {
            var document = CreateDocument(source);

            using (var parser = new HtmlDomBuilder(document))
            {
                return(parser.Parse(_options));
            }
        }
コード例 #8
0
ファイル: HtmlParser.cs プロジェクト: lahma/AngleSharp
        private HtmlDomBuilder CreateBuilder(HtmlDocument document)
        {
            var parser = new HtmlDomBuilder(document);

            if (HasEventListener(EventNames.Error))
            {
                parser.Error += (s, ev) => InvokeEventListener(ev);
            }

            return(parser);
        }
コード例 #9
0
ファイル: HDocument.cs プロジェクト: ziomyslaw/ScrapySharp
        public static HDocument Parse(string source)
        {
            var codeReader        = new CodeReader(source);
            var declarationReader = new HtmlDeclarationReader(codeReader);
            var domBuilder        = new HtmlDomBuilder(declarationReader);

            return(new HDocument
            {
                Children = domBuilder.BuildDom().ToList()
            });
        }
コード例 #10
0
ファイル: HtmlParser.cs プロジェクト: lahma/AngleSharp
        private INodeList ParseFragment(HtmlDocument document, IElement contextElement)
        {
            var parser = new HtmlDomBuilder(document);

            if (contextElement is Element element)
            {
                element = document.CreateElementFrom(element.LocalName, element.Prefix);
                var fragment = parser.ParseFragment(_options, element).DocumentElement;
                element.AppendNodes(fragment.ChildNodes.ToArray());
                return(element.ChildNodes);
            }

            return(parser.Parse(_options).ChildNodes);
        }
コード例 #11
0
        /// <summary>
        /// Parses the string and returns the result.
        /// </summary>
        public INodeList ParseFragment(String source, IElement context)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);

            if (context != null)
            {
                var element = context as Element ??
                              Factory.HtmlElements.Create(document, context.LocalName, context.Prefix);
                return(parser.ParseFragment(_options, element).DocumentElement.ChildNodes);
            }

            return(parser.Parse(_options).ChildNodes);
        }
コード例 #12
0
        /// <summary>
        /// Parses the string and returns the result.
        /// </summary>
        public INodeList ParseFragment(String source, IElement contextElement)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);
            var element  = contextElement as Element;

            if (element != null)
            {
                var context = document.Context;
                element = document.CreateElementFrom(contextElement.LocalName, contextElement.Prefix);
                return(parser.ParseFragment(_options, element).DocumentElement.ChildNodes);
            }

            return(parser.Parse(_options).ChildNodes);
        }
コード例 #13
0
        /// <summary>
        /// Parses the string and returns the result.
        /// </summary>
        public INodeList ParseFragment(String source, IElement contextElement)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);

            if (contextElement is Element element)
            {
                var context = document.Context;
                element = document.CreateElementFrom(contextElement.LocalName, contextElement.Prefix);
                var fragment = parser.ParseFragment(_options, element).DocumentElement;
                element.AppendNodes(fragment.ChildNodes.ToArray());
                return(element.ChildNodes);
            }

            return(parser.Parse(_options).ChildNodes);
        }
コード例 #14
0
        internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken)
        {
            var scripting     = context.Configuration.IsScripting();
            var parserOptions = new HtmlParserOptions {
                IsScripting = scripting
            };
            var document = new HtmlDocument(context, options.Source);
            var parser   = new HtmlDomBuilder(document);

            document.Setup(options);
            context.NavigateTo(document);
            context.Fire(new HtmlParseEvent(document, completed: false));
            await parser.ParseAsync(parserOptions, cancelToken).ConfigureAwait(false);

            context.Fire(new HtmlParseEvent(document, completed: true));
            return(document);
        }
コード例 #15
0
        /// <summary>
        /// Parses the string and returns the result.
        /// </summary>
        public INodeList ParseFragment(String source, IElement context)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);

            if (context != null)
            {
                var element = context as Element;

                if (element == null)
                {
                    var configuration = document.Options;
                    var factory       = configuration.GetFactory <IHtmlElementFactory>();
                    element = factory.Create(document, context.LocalName, context.Prefix);
                }

                return(parser.ParseFragment(_options, element).DocumentElement.ChildNodes);
            }

            return(parser.Parse(_options).ChildNodes);
        }