Dudyalu Sravan Kumar Reddy Ответов: 1

Как получить имя класса CSS или свойства стиля из HTML-документа с помощью C#


Может ли кто-нибудь помочь мне, как получить имя класса CSS или свойства стиля текста / ключевого слова из html-документа с помощью С#?
Допустим, я передаю текст "образец текста" из кода.
У меня есть html-документ, который имеет следующий код

<div class="sampleclass">
Sample Text
</div>


Мне нужно получить результат в виде sampleclass при передаче образца текста.

Что я уже пробовал:

Я использовал библиотеку HTMLAgility, я могу получить текст на основе имени класса, но мне нужно наоборот, чтобы получить имя класса при передаче текста.

1 Ответов

Рейтинг:
10

Thomas Daniels

Если у вас есть HtmlDocument (используя HtmlAgilityPack), вы можете использовать .DocumentNode.Descendants() чтобы получить все потомки и использовать методы расширения LINQ, вы можете найти элемент, содержащий "образец текста", и получить его класс:

string html = @"<!DOCTYPE html>
<html>
<head><title>Sample document</title></head>
<body>
<div class=""sampleclass"">
Sample Text
</div>
</body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

HtmlNode foundNode = doc.DocumentNode.Descendants().Where(x => x.InnerHtml.Trim() == "Sample Text").FirstOrDefault();
string classAttribute = foundNode?.Attributes["class"]?.Value;
.Где[^] фильтрует потомков с помощью предиката x => x.InnerHtml.Trim() == "Sample Text", что означает, что для элемента 'x' в списке потомков обрезанный InnerHTML 'x' должен быть "образцом текста". .Метода firstordefault[^] возвращает первый найденный элемент, или null если никакой элемент не найден.

Когда узел найден, атрибут извлекается из узла. Обратите внимание, что я использовал ?. вместо того, чтобы просто . потому что ?. это оператор[^]. foundNode?.Attributes["class"] означает "если foundNode имеет значение NULL, то значением этого выражения является значение NULL; если foundNode не является нулем, то данное выражение выполняет .Класс атрибута"]". ?.Value работает точно так же. Использование этого оператора позволяет избежать нескольких null проверки. Если foundNode является нулевым или если у него нет атрибута класса, то classAttribute это тоже ноль.