C# 如何在没有类、id等的情况下解析出html元素

C# 如何在没有类、id等的情况下解析出html元素,c#,visual-studio,html-agility-pack,C#,Visual Studio,Html Agility Pack,我对C和HtmlAgilityPack有问题。 我想分析出一种材料的价格,但我不知道如何准确地访问此项目。这是tr中的td元素。问题是有3个td元素,我无法访问第二个,但只能访问第一个。我希望你能理解我的问题并能帮助我 这是我想要访问的HTML代码: 莱姆 $191 科勒 $303 这是我用C写的代码,它正在工作,但只针对每个td元素的第一个td元素: var products=htmlDocument.DocumentNode.DegenantsDiv .Wherenode=>node.Get

我对C和HtmlAgilityPack有问题。 我想分析出一种材料的价格,但我不知道如何准确地访问此项目。这是tr中的td元素。问题是有3个td元素,我无法访问第二个,但只能访问第一个。我希望你能理解我的问题并能帮助我

这是我想要访问的HTML代码:

莱姆 $191 科勒 $303 这是我用C写的代码,它正在工作,但只针对每个td元素的第一个td元素:

var products=htmlDocument.DocumentNode.DegenantsDiv .Wherenode=>node.GetAttributeValueid, .EqualAccordion1.ToList; var productListItems=products[0]。后代str .Wherenode=>node.GetAttributeValuedata-name, .Contains.ToList; productListItems中的foreach var productListItem { Console.WriteLineproductListItem.GetAttributeValuedata-name; Console.WriteLineproductListItem.DegenantStd.FirstOrDefault.InnerText; Console.WriteLine; } 启动程序时,控制台中会显示:

粘土 莱姆

煤 科勒

正如我所希望的,但是应该显示物品的价格,而不是莱姆或科尔。

FirstOrDefault return first td表示莱姆

使用以下命令:

var tds = productListItem.Descendants("td").ToList();

var name = tds[0].InnerText;
var price = tds[1].InnerText;

Console.WriteLine(name);

注意IndexAutofrange例外情况

Antoine V的替代解决方案非常干净: 我会用属性price命名tds,并在where中添加一个指向价格的子句

并通过以下方式访问它:

替换这个

Console.WriteLine(productListItem.GetAttributeValue("data-name", ""));
由此

Console.WriteLine(productListItem.Attributes['price'].value));
否则,向每个td添加一个类,例如name price和chkbox

Console.WriteLine(productListItem.Descendants("td").Attributes["price"].value);

希望有帮助?

返回IEnumerable,您不能使用索引访问器。要么先用ToArray/ToList枚举,要么使用Skip1感谢您的回答。然而,我有一个问题。我知道,我应该知道这一点,但由于我是C语言的新手,我仍然无法做到:我到底应该在哪里将您的代码加载到我的项目中?但我还有另一个问题。现在所有变量都正确显示了。第一行数据名称、第二行名称、第三行价格。现在我想将每个价格分配给一个变量字符串,我可以稍后访问它。。。比如:字符串LehmPreis=。我希望您能帮我:@DavidB hit:Convert.toint32您的\u string是的,但我需要将价格转换成字符串。。我怎样才能用你的代码做到这一点?我只想为每种材质创建一个字符串,大约30个字符串,然后得到这些字符串中每种特定材质的价格。这是因为我需要这个值作为计算器,从服务器上获取数字。现在我想得到这些值,并根据用户选择的材质计算一个值。请参见编辑David?刚刚给你添加了另一个选择