AngleSharp by AngleSharp

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

.NET API 1,230,336 bytes

 QueryExtensions

static class QueryExtensions
Extensions for performing QuerySelector operations.
using AngleSharp.Dom; using AngleSharp.Dom.Collections; using AngleSharp.Dom.Css; using AngleSharp.Parser.Css; using System.Collections.Generic; namespace AngleSharp.Extensions { internal static class QueryExtensions { public static IElement QuerySelector(this INodeList elements, string selectors) { ISelector selector = CssParser.Default.ParseSelector(selectors); Validate(selector); return elements.QuerySelector(selector); } public static HtmlCollection<IElement> QuerySelectorAll(this INodeList elements, string selectors) { ISelector selector = CssParser.Default.ParseSelector(selectors); Validate(selector); List<IElement> list = new List<IElement>(); elements.QuerySelectorAll(selector, list); return new HtmlCollection<IElement>(list); } public static HtmlCollection<IElement> GetElementsByClassName(this INodeList elements, string classNames) { List<IElement> list = new List<IElement>(); string[] array = classNames.SplitSpaces(); if (array.Length != 0) elements.GetElementsByClassName(array, list); return new HtmlCollection<IElement>(list); } public static HtmlCollection<IElement> GetElementsByTagName(this INodeList elements, string tagName) { List<IElement> list = new List<IElement>(); elements.GetElementsByTagName(tagName.Is(Keywords.Asterisk) ? null : tagName, list); return new HtmlCollection<IElement>(list); } public static HtmlCollection<IElement> GetElementsByTagName(this INodeList elements, string namespaceUri, string localName) { List<IElement> list = new List<IElement>(); elements.GetElementsByTagName(namespaceUri, localName.Is(Keywords.Asterisk) ? null : localName, list); return new HtmlCollection<IElement>(list); } public static T QuerySelector<T>(this INodeList elements, ISelector selectors) where T : class, IElement { return elements.QuerySelector(selectors) as T; } public static IElement QuerySelector(this INodeList elements, ISelector selector) { for (int i = 0; i < elements.Length; i++) { IElement element = elements[i] as IElement; if (element != null) { if (selector.Match(element)) return element; if (element.HasChildNodes) { element = element.ChildNodes.QuerySelector(selector); if (element != null) return element; } } } return null; } public static HtmlCollection<IElement> QuerySelectorAll(this INodeList elements, ISelector selector) { List<IElement> list = new List<IElement>(); elements.QuerySelectorAll(selector, list); return new HtmlCollection<IElement>(list); } public static void QuerySelectorAll(this INodeList elements, ISelector selector, List<IElement> result) { for (int i = 0; i < elements.Length; i++) { IElement element = elements[i] as IElement; if (element != null) { foreach (IElement item in element.DescendentsAndSelf<IElement>()) { if (selector.Match(item)) result.Add(item); } } } } public static bool Contains(this ITokenList list, string[] tokens) { for (int i = 0; i < tokens.Length; i++) { if (!list.Contains(tokens[i])) return false; } return true; } public static void GetElementsByClassName(this INodeList elements, string[] classNames, List<IElement> result) { for (int i = 0; i < elements.Length; i++) { IElement element = elements[i] as IElement; if (element != null) { if (element.ClassList.Contains(classNames)) result.Add(element); if (element.ChildElementCount != 0) element.ChildNodes.GetElementsByClassName(classNames, result); } } } public static void GetElementsByTagName(this INodeList elements, string tagName, List<IElement> result) { for (int i = 0; i < elements.Length; i++) { IElement element = elements[i] as IElement; if (element != null) { if (tagName == null || tagName.Isi(element.LocalName)) result.Add(element); if (element.ChildElementCount != 0) element.ChildNodes.GetElementsByTagName(tagName, result); } } } public static void GetElementsByTagName(this INodeList elements, string namespaceUri, string localName, List<IElement> result) { for (int i = 0; i < elements.Length; i++) { IElement element = elements[i] as IElement; if (element != null) { if (element.NamespaceUri.Is(namespaceUri) && (localName == null || localName.Isi(element.LocalName))) result.Add(element); if (element.ChildElementCount != 0) element.ChildNodes.GetElementsByTagName(namespaceUri, localName, result); } } } private static void Validate(ISelector selector) { if (selector == null || selector is UnknownSelector) throw new DomException(DomError.Syntax); } } }