AngleSharp by Florian Rappl

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

.NET API 1,171,968 bytes

 Attr

sealed class Attr : IAttr, IEquatable<IAttr>
Represents a generic node attribute.
using AngleSharp.Html; using System; using System.Text; namespace AngleSharp.Dom { internal sealed class Attr : IAttr, IEquatable<IAttr> { private readonly Element _container; private readonly string _localName; private readonly string _prefix; private readonly string _namespace; private string _value; public string Prefix => _prefix; public bool IsId { get { if (_prefix == null) return _localName.Equals(AttributeNames.Id, StringComparison.OrdinalIgnoreCase); return false; } } public bool Specified => !string.IsNullOrEmpty(_value); public string Name { get { if (_prefix != null) return _prefix + ":" + _localName; return _localName; } } public string Value { get { return _value; } set { string value2 = _value; _value = value; _container.AttributeChanged(_localName, _namespace, value2, false); } } public string LocalName => _localName; public string NamespaceUri => _namespace; internal Attr(Element container, string localName) : this(container, localName, string.Empty) { } internal Attr(Element container, string localName, string value) { _container = container; _localName = localName; _value = value; } internal Attr(Element container, string prefix, string localName, string value, string namespaceUri) { _prefix = prefix; _localName = localName; _container = container; _value = value; _namespace = namespaceUri; } public bool Equals(IAttr other) { if (other != this) { if (_value == other.Value) return _localName == other.Name; return false; } return true; } public override string ToString() { StringBuilder stringBuilder = Pool.NewStringBuilder(); if (string.IsNullOrEmpty(_namespace)) stringBuilder.Append(LocalName); else if (_namespace == Namespaces.XmlUri) { stringBuilder.Append(Namespaces.XmlPrefix).Append(':').Append(LocalName); } else if (_namespace == Namespaces.XLinkUri) { stringBuilder.Append(Namespaces.XLinkPrefix).Append(':').Append(LocalName); } else if (_namespace == Namespaces.XmlNsUri) { stringBuilder.Append(XmlNamespaceLocalName()); } else { stringBuilder.Append(_localName); } stringBuilder.Append('=').Append('"'); for (int i = 0; i < _value.Length; i++) { switch (_value[i]) { case '&': stringBuilder.Append("&amp;"); break; case ' ': stringBuilder.Append("&nbsp;"); break; case '"': stringBuilder.Append("&quot;"); break; default: stringBuilder.Append(_value[i]); break; } } return stringBuilder.Append('"').ToPool(); } private string XmlNamespaceLocalName() { if (LocalName != Namespaces.XmlNsPrefix) return Namespaces.XmlNsPrefix + ":"; return LocalName; } } }