Есть такая разметка:
<html>
...
<div class="shop-name">rand</div>
...
<div class="shop-name">rand</div>
...
<div class="shop-name">this</div>
...
<div class="shop-name">rand</div>
...
</html>
Как вернуть число 3?
"this" в разметке идет под номером 3.
Спасибо.
Обязательно познакомьтесь с библиотекой HtmlAgilityPack!
Вот пример, который решает Вашу проблему:
public static int GetShopIndex(string HTML, string ShopName)
{
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(HTML);
return doc.DocumentNode
.SelectNodes("//html//div[@class='shop-name']")? // Выбираем интересующие нас узлы по xpath
.Select((x, i) => new { Text = x.InnerText, Index = i }) // Комбинируем внутренний текст и номер узла
.FirstOrDefault(x => x.Text == ShopName)?.Index ?? -1; // Возвращаем индекс узла, текст которого равен заданному
// Если такого нет - возвращаем -1
}
Использование:
int i = GetShopIndex("<html><div class='shop-name'>rand</div><div class='shop-name'>this</div></html>", "this");
//i == 1
Если отсчет с 0 Вас по каким-то причинам не устраивает, просто добавьте единичку)
Дополненю @Kir_Antipov могу дать ответ на альтернативной библиотеке парсинга — AngleSharp:
var html = @"<html>
<div class=""shop-name"">rand</div>
<div class=""shop-name"">rand</div>
<div class=""shop-name"">this</div>
<div class=""shop-name"">rand</div>
</html>";
var parser = new HtmlParser();
var document = parser.ParseDocument(html);
var elements = document.QuerySelectorAll("div.shop-name").Select(x => x.TextContent).ToArray();
// выводим все
foreach (var element in elements)
{
Console.WriteLine($"{element}");
}
// выводим третий элемент
Console.WriteLine($"Третий элемент: {elements[3]}");
Ссылки по теме:
Нумерация если нужна, то linq такое же:
Select((x, i) => new { Index = i, Text = x.TextContent })
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как в ViewModel получить то, что выбрал юзер в ComboBox? Я не мог найти как это сделать, если я заполняю список внутри XAML, а не из кода
Выдает вот это: Strict Standards: Only variables should be passed by reference on line 13 Не могу понять где константаpostfix не добавляется
Есть несколько проектов, взаимодействующих друг с другом по http api или console api или еще как-нибудь