AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.8.5" />

 SvgDocument

Represents a document node that contains only SVG nodes.
using AngleSharp.Dom.Events; using AngleSharp.Extensions; using AngleSharp.Network; using AngleSharp.Parser.Xml; using System; using System.Threading; using System.Threading.Tasks; namespace AngleSharp.Dom.Svg { internal sealed class SvgDocument : Document, ISvgDocument, IDocument, INode, IEventTarget, IMarkupFormattable, IParentNode, IGlobalEventHandlers, IDocumentStyle, INonElementParentNode, IDisposable { public override IElement DocumentElement => RootElement; public ISvgSvgElement RootElement => this.FindChild<ISvgSvgElement>(); public override string Title { get { ISvgTitleElement svgTitleElement = RootElement.FindChild<ISvgTitleElement>(); if (svgTitleElement != null) return svgTitleElement.TextContent.CollapseAndStrip(); return string.Empty; } set { ISvgTitleElement svgTitleElement = RootElement.FindChild<ISvgTitleElement>(); if (svgTitleElement == null) { svgTitleElement = new SvgTitleElement(this, null); RootElement.AppendChild(svgTitleElement); } svgTitleElement.TextContent = value; } } internal SvgDocument(IBrowsingContext context, TextSource source) : base(context, source) { base.ContentType = MimeTypes.Svg; } internal SvgDocument(IBrowsingContext context = null) : this(context, new TextSource(string.Empty)) { } public override INode Clone(bool deep = true) { SvgDocument svgDocument = new SvgDocument(base.Context, new TextSource(base.Source.Text)); Node.CopyProperties(this, svgDocument, deep); Document.CopyDocumentProperties(this, svgDocument, deep); return svgDocument; } internal static async Task<SvgDocument> LoadAsync(IBrowsingContext context, IResponse response, TextSource source, CancellationToken cancelToken) { string contentType = response.Headers.GetOrDefault(HeaderNames.ContentType, MimeTypes.Svg); SvgDocument document = new SvgDocument(context, source); XmlParser parser = new XmlParser(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(cancelToken).ConfigureAwait(false); return document; } } }