C# - Html Agility Pack - テキストコンテンツと一致するオプションタグ値を取得する

bots c# html-agility-pack

質問

私は、Webサイト用の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;
}

サンプル製品のレスポンスは次のとおりです。

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;
}

ウェブサイトをチェックしたくない場合、これは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;
}

私は何をしたいですか:

商品の商品リンクを入力してサイズを選択します。選択したサイズが見つかった場合は、そのサイズのサイズコードのみを返します。たとえば、サンプルアイテムを使用して、アプリケーションが33456を返すように[中]を選択します。

受け入れられた回答

LINQと大文字と小文字を区別しないマッチングを使用してこれを実現する1つの方法:

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);



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ