AngleSharp by Florian Rappl

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

 XmlDocument

Represents a document node that contains only XML 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.Xml { internal sealed class XmlDocument : Document, IXmlDocument, IDocument, INode, IEventTarget, IMarkupFormattable, IParentNode, IGlobalEventHandlers, IDocumentStyle, INonElementParentNode, IDisposable { public override IElement DocumentElement => this.FindChild<IElement>(); public override string Title { get { return string.Empty; } set { } } internal XmlDocument(IBrowsingContext context, TextSource source) : base(context, source) { base.ContentType = MimeTypes.Xml; } internal XmlDocument(IBrowsingContext context = null) : this(context, new TextSource(string.Empty)) { } public override INode Clone(bool deep = true) { XmlDocument xmlDocument = new XmlDocument(base.Context, new TextSource(base.Source.Text)); Node.CopyProperties(this, xmlDocument, deep); Document.CopyDocumentProperties(this, xmlDocument, deep); return xmlDocument; } internal static async Task<XmlDocument> LoadAsync(IBrowsingContext context, IResponse response, TextSource source, CancellationToken cancelToken) { string contentType = response.Headers.GetOrDefault(HeaderNames.ContentType, MimeTypes.Xml); XmlDocument document = new XmlDocument(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; } } }