/// <inheritdoc /> public override IElement ParseSubtree(String html) { var context = ((IElement)this).Owner?.Context; var source = new TextSource(html); var document = new XmlDocument(context, source); var parser = new XmlDomBuilder(document); var options = new XmlParserOptions { IsSuppressingErrors = true, }; return(parser.ParseFragment(options, this).DocumentElement); }
internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var parserOptions = new XmlParserOptions { }; var document = new XmlDocument(context, options.Source); var parser = new XmlDomBuilder(document); document.Setup(options); context.NavigateTo(document); context.Fire(new HtmlParseEvent(document, completed: false)); await parser.ParseAsync(default(XmlParserOptions), cancelToken).ConfigureAwait(false); context.Fire(new HtmlParseEvent(document, completed: true)); return(document); }
/// <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="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 <SvgDocument> LoadAsync(IBrowsingContext context, IResponse response, TextSource source, CancellationToken cancelToken) { var contentType = response.Headers.GetOrDefault(HeaderNames.ContentType, MimeTypes.Svg); var document = new SvgDocument(context, source); var parser = new XmlDomBuilder(document); document.ContentType = contentType; 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; await parser.ParseAsync(default(XmlParserOptions), cancelToken).ConfigureAwait(false); return(document); }
internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var parserOptions = new XmlParserOptions { }; var document = new SvgDocument(context, options.Source); var factory = context.Configuration.GetFactory <IElementFactory <SvgElement> >(); document.Setup(options); context.NavigateTo(document); context.Fire(new HtmlParseEvent(document, completed: false)); using (var parser = new XmlDomBuilder(document, factory.Create)) { await parser.ParseAsync(parserOptions, cancelToken).ConfigureAwait(false); } context.Fire(new HtmlParseEvent(document, completed: true)); return(document); }
internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var document = new XmlDocument(context, options.Source); var evt = new HtmlParseStartEvent(document); var events = context.Configuration.Events; var parser = new XmlDomBuilder(document); document.Setup(options); context.NavigateTo(document); if (events != null) { events.Publish(evt); } await parser.ParseAsync(default(XmlParserOptions), cancelToken).ConfigureAwait(false); evt.FireEnd(); return(document); }
public void HelloWorldBasicTest() { XmlDocument doc = new XmlDocument(); XmlDomBuilder builder = new XmlDomBuilder(doc); XmlNode htmlElem = builder.AddElement(builder.RootNode, "html"); XmlNode bodyElem = builder.AddElement(htmlElem, "body"); XmlNode anchor = builder.AddElement(bodyElem, "a"); builder.AddAttribute(anchor, "class", "bold"); builder.AddAttribute(anchor, "class", "red"); builder.AddText(anchor, "Some Anchor Text"); Console.WriteLine(doc.OuterXml); //Assert.AreEqual("bold", builder.GetAttribute(anchor, "class")); //Assert.IsEmpty(builder.GetAttribute(anchor, "nonexistant")); // Ensure we don't repeat attribute values Assert.AreEqual("bold", doc.SelectSingleNode("//a/@class").Value); // Just check full output... Assert.AreEqual("<html><body><a class=\"bold\">Some Anchor Text</a></body></html>", doc.OuterXml); }
/// <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="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 <XmlDocument> LoadAsync(IBrowsingContext context, IResponse response, TextSource source, CancellationToken cancelToken) { var document = new XmlDocument(context, source); var evt = new HtmlParseStartEvent(document); var events = context.Configuration.Events; var parser = new XmlDomBuilder(document); document.ContentType = response.Headers.GetOrDefault(HeaderNames.ContentType, MimeTypes.Xml); 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); } await parser.ParseAsync(default(XmlParserOptions), cancelToken).ConfigureAwait(false); evt.FireEnd(); return(document); }