/// <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)); }
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); } } }
/// <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); }
/// <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); }
/// <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)); }
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); }
/// <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)); } }
private HtmlDomBuilder CreateBuilder(HtmlDocument document) { var parser = new HtmlDomBuilder(document); if (HasEventListener(EventNames.Error)) { parser.Error += (s, ev) => InvokeEventListener(ev); } return(parser); }
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() }); }
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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }