C# 使用agility pack读取、分组和排序html文档中的节点

C# 使用agility pack读取、分组和排序html文档中的节点,c#,html,html-agility-pack,C#,Html,Html Agility Pack,我正在尝试构建一个类,该类将基于另一个网站对html文档进行读取、分组和排序 我将展示到目前为止我拥有的东西。下面是一个如何构建网页的示例(请记住,它只是“如何”构建的,我已经重写了整个过程): 我有我的div收藏,但我无法进行下一步。首先要了解的是,上面html代码的布局会发生变化,所以有时候第一个道具不会显示,有时候是第六个道具,等等 因此,我想检查节点的属性是否为“标签”: 但是我不知道如何检查后面的值,因为下一个同级是一个空div。我也不知道HtmlAgilityPack如何工作,所以我

我正在尝试构建一个类,该类将基于另一个网站对html文档进行读取、分组和排序

我将展示到目前为止我拥有的东西。下面是一个如何构建网页的示例(请记住,它只是“如何”构建的,我已经重写了整个过程):

我有我的div收藏,但我无法进行下一步。首先要了解的是,上面html代码的布局会发生变化,所以有时候第一个道具不会显示,有时候是第六个道具,等等

因此,我想检查节点的属性是否为“标签”:

但是我不知道如何检查后面的值,因为下一个同级是一个空div。我也不知道HtmlAgilityPack如何工作,所以我想知道是否有更简单的方法来获得它

有人能告诉我如何继续,或者我所做的是否是错误的,以及如何纠正它吗

*编辑*

我改变了路线:

HtmlNodeCollection allNodes = parentNode.SelectNodes(".//div[@class='row']");

因此,现在我的收藏范围仅限于我将获得的div。但是当我得到一个类为“label”的div时,我仍然需要阅读它的值(例如:Front Text),如果这是Front Text,那么就得到下面的类为“value”的div。

我建议您学习一下Html Agility Pack支持的div,并允许通过Html DOM进行简洁的查询。例如,以下代码:

    HtmlDocument doc = new HtmlDocument();
    doc.Load("test.htm");

    HtmlNode node = doc.GetElementbyId("ab100_ab100_ab100_Main_Sub_Sub_objComponent");
    foreach (HtmlNode row in node.SelectNodes(".//div[@class='row']"))
    {
        Console.Write(row.SelectSingleNode("div[@class='label']").InnerText.Trim());
        Console.WriteLine(row.SelectSingleNode("div[@class='value']").InnerText.Trim());
    }
将输出以下内容:

First Name:Albert Trebla
Second Year:
Classy Stuff:7
Weather:Cloudy  - Might Rain
Front Text:OpenedThe shop is opened when the bridges are lowered.
Flavor:"This taste good!"

如果在value或label div中需要HTML,则可以再次从中发出XPATH查询。

您希望从原始HTML中提取哪些数据?我需要原始HTML文档中的所有可用数据。但我不能简单地按“value”进行筛选,因为获得的值不表示此数据是否属于天气,经典的东西,或者其他。你想要一本包含所有DIV标签和DIV值内部文本的字典吗?哦!那太好了!我该怎么做呢?好的建议,我会检查一下,然后解决这个问题。谢谢好吧,我试过一些方法,但我还是不知道这是怎么回事。多亏了您的advide,我成功地使用HtmlNodeCollection allNodes=parentNode.SelectNodes(“.//div[@class='row']”)缩小了所有需要的值;行,但我需要检查是否有一个节点有一个类“label”,其值是,例如,前文本,如果是真的,我需要相应地在div中获取值
HtmlNodeCollection allNodes = parentNode.SelectNodes(".//div[@class='row']");
    HtmlDocument doc = new HtmlDocument();
    doc.Load("test.htm");

    HtmlNode node = doc.GetElementbyId("ab100_ab100_ab100_Main_Sub_Sub_objComponent");
    foreach (HtmlNode row in node.SelectNodes(".//div[@class='row']"))
    {
        Console.Write(row.SelectSingleNode("div[@class='label']").InnerText.Trim());
        Console.WriteLine(row.SelectSingleNode("div[@class='value']").InnerText.Trim());
    }
First Name:Albert Trebla
Second Year:
Classy Stuff:7
Weather:Cloudy  - Might Rain
Front Text:OpenedThe shop is opened when the bridges are lowered.
Flavor:"This taste good!"