C# - Html Agility Pack - 获取匹配文本内容的选项标签值
C# - Html Agility Pack - Get option tag value that matches text content
我正在使用 Html Agility Pack 为网站制作自动化应用程序。
网站上的每个产品都有不同的 html 尺寸代码,我正在尝试从产品中获取该代码。
这是网站和示例产品:Click here
这是我当前的代码:
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>
我想要发生的事情:
我输入商品 link 商品和 select 尺寸。如果找到尺码 selected,则仅 return 该尺码的尺码代码。例如,我使用示例项目和 select Medium,因此应用程序应该 return 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);
我正在使用 Html Agility Pack 为网站制作自动化应用程序。 网站上的每个产品都有不同的 html 尺寸代码,我正在尝试从产品中获取该代码。
这是网站和示例产品:Click here
这是我当前的代码:
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>
我想要发生的事情:
我输入商品 link 商品和 select 尺寸。如果找到尺码 selected,则仅 return 该尺码的尺码代码。例如,我使用示例项目和 select Medium,因此应用程序应该 return 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);