C # - Html Agility Pack - получить значение тега опциона, соответствующее текстовому контенту

bots c# html-agility-pack

Вопрос

Я делаю приложение автоматизации с помощью Html Agility Pack для веб-сайта. Каждый продукт на веб-сайте имеет другой код html для размера, и я пытаюсь получить этот код из продукта.

Это веб-сайт и пример продукта: Нажмите здесь

Вот мой текущий код:

var webGet = new HtmlWeb();
var doc = webGet.Load(txtLink.Text);

HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//*[contains(@id,'size')]");
foreach (var node in collection)
{
var Size = node.InnerHtml.ToString();
txtLog.Text += Environment.NewLine + Size;
}

Вот ответ на пример продукта:

<option value="33455">Small
<option value="33456">Medium
<option value="33457">Large
<option value="33458">XLarge

Если вы не хотите проверять веб-сайт, это выглядит как HTML-код для элемента:

<select name="size" id="size"><option value="33455">Small</option>
<option value="33456">Medium</option>
<option value="33457">Large</option>
<option value="33458">XLarge</option>
</select>

Что я хочу:

Я ввожу ссылку на продукт для элемента и выбираю размер. Если выбранный размер найден, верните только код размера для этого размера. Например, я использую элемент example и выбираю Medium, чтобы приложение возвращало 33456.

Принятый ответ

Один из способов добиться этого с помощью LINQ и нечувствительности к регистру:

var size = "xlarge";
var option = document
    .GetElementbyId("size")
    .ChildNodes
    .Where(x => x.Name == "option"
        && x.NextSibling.InnerText
            .IndexOf(size, StringComparison.OrdinalIgnoreCase) != -1)
    .FirstOrDefault();

var result = option != null 
    ? option.Attributes["value"].Value
    : "not found";
Console.WriteLine("{0}: {1}", size, result);


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему