如何从html敏捷包中的相同类的html获取所有div

时间:2016-04-09 06:51:11

标签: c# linq xpath html-agility-pack

我得到所有div具有相同的类名,但是当我将它们插入数据库并使用数据表来处理键时我使用查询 选择前1个ID,从myTable链接它返回所有记录,意味着我的代码有问题,我们是否需要使用算法或模式来提取我们需要的数据,或者我们可以在从htmldocument获取数据后直接访问。我有一个网站的所有Html,我选择了52个具有相同类的div,但当我从我的数据库中选择它们到datatable时,它会一次又一次地插入它们,如果我使用Top 1查询。它返回了我所有的记录。我该怎么办? 例如,这是获取子类别的代码。我正在选择块1,其中包含与我的div相关的记录,并且还有其他div的数据。

doc.LoadHtml(Result);
 HtmlNodeCollection categorynode = null;

            categorynode = doc.DocumentNode.SelectNodes("//div[@class='block1']"); //| //div[@class='column even'] | //div[@class='column odd'] ");//"//div[@class='drop-menu']//a[@href]"
            if (categorynode != null)
            {
                foreach (HtmlNode Node in categorynode)
                {

                    string Html = Node.InnerHtml;
                    if (Html != null)
                    {

                        HtmlDocument Node2 = new HtmlDocument();
                        Node2.LoadHtml(Html);
                        foreach (HtmlNode subbnode in Node2.DocumentNode.SelectNodes("//div[@class='itemMenu level1']/a"))
                        {
                            string attt = subbnode.InnerText;
                            attt = attt.Replace("&amp", "&").Replace("&;", "&");
                            HtmlAttribute att = subbnode.Attributes["href"];
                            Regex r = new Regex(@"<a.*?href=(""|')(?<href>.*?)(""|').*?>(?<value>.*?)</a>");
                            //var regex=(new Regex(@"(?<=[\?&]id=)\d+(?=\&|\#|$)").Match(att.Value).Value);

                            string links = att.Value;
                            ModelClass _ms = new ModelClass();
                            _ms.link = links;
                            _ms.Name = attt;
                            _ms.CID = 0;
                            _ms.Type = "Sub Categories";
                            Controller cc = new Controller();
                            cc.InsertCategories(_ms);
                            Console.WriteLine("Sub Categories >>> " + _ms.Name);
                        }
                    }
                }

我必须使用算法或树来获取我想要的记录吗?指导我,

1 个答案:

答案 0 :(得分:1)

在你的选择中使用// div,双斜杠将从整个源中选择与目标div具有相同名称的div并使用点.//在斜杠之前将只获取当前div