AngleSharp by Florian Rappl

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

 CharacterData

public abstract class CharacterData : Node
The base class for all characterdata implementations.
using System.Text; namespace AngleSharp.DOM { [DOM("CharacterData")] public abstract class CharacterData : Node { private StringBuilder sb; internal char this[int index] { get { return sb[index]; } set { sb[index] = value; } } [DOM("length")] public int Length { get { return sb.Length; } } [DOM("nodeValue")] public override string NodeValue { get { return sb.ToString(); } set { sb.Remove(0, sb.Length).Append(value); } } [DOM("textContent")] public override string TextContent { get { return sb.ToString(); } set { sb.Remove(0, sb.Length).Append(value); } } [DOM("data")] public string Data { get { return sb.ToString(); } set { sb.Remove(0, sb.Length).Append(value); } } internal CharacterData() { sb = new StringBuilder(); } [DOM("appendChild")] public override Node AppendChild(Node child) { throw new DOMException(ErrorCode.NotSupported); } [DOM("insertBefore")] public override Node InsertBefore(Node newElement, Node referenceElement) { throw new DOMException(ErrorCode.NotSupported); } [DOM("insertChild")] public override Node InsertChild(int index, Node child) { throw new DOMException(ErrorCode.NotSupported); } [DOM("removeChild")] public override Node RemoveChild(Node child) { throw new DOMException(ErrorCode.NotSupported); } [DOM("replaceChild")] public override Node ReplaceChild(Node newChild, Node oldChild) { throw new DOMException(ErrorCode.NotSupported); } [DOM("substringData")] public string SubstringData(int offset, int count) { return sb.ToString(offset, count); } [DOM("appendData")] public CharacterData AppendData(string data) { sb.Append(data); return this; } public CharacterData AppendData(char data) { sb.Append(data); return this; } [DOM("insertData")] public CharacterData InsertData(int offset, string data) { sb.Insert(offset, data); return this; } public CharacterData InsertData(int offset, char data) { sb.Insert(offset, data); return this; } [DOM("deleteData")] public CharacterData DeleteData(int offset, int count) { sb.Remove(offset, count); return this; } [DOM("replaceData")] public CharacterData ReplaceData(int offset, int count, string data) { sb.Remove(offset, count).Insert(offset, data); return this; } public override string ToHtml() { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < sb.Length; i++) { switch (sb[i]) { case '&': stringBuilder.Append("&amp;"); break; case '<': stringBuilder.Append("&lt;"); break; case '>': stringBuilder.Append("&gt;"); break; default: stringBuilder.Append(sb[i]); break; } } return stringBuilder.ToString(); } } }