使用HtmlAgilityPack检查节点是否包含字符串

时间:2017-10-12 22:16:46

标签: c# html

<article class="swiper-slide" itemscope itemtype="http://schema.org/Movie" 
                        data-list="Home - Highlights"
                        data-name="Thor: Ragnarok"
                        data-id="19730"
                        data-brand="Disney"
                        data-position="2"
                        >

该页面包含2-3个swiper-slides,我需要检查&#34;数据名称&#34;包含一个特定的字符串。

@Edit:

HtmlWeb _Web = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument htmldoc = _Web.Load(Url);
            htmldoc.OptionFixNestedTags = true;
            try
            {
                foreach (HtmlNode x in htmldoc.DocumentNode.SelectNodes("//div[@class='swiper-slide']"))
                {
                  //  var op = x.SelectNodes("div[@class='data-name']");
                    Console.WriteLine(x.SelectNodes("data-name"));
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Cant get info!");
            }

抱歉,我忘记发布代码了,我可以获取所有节点&#swe-slide&#39;,但是如何获取数据名称值?

2 个答案:

答案 0 :(得分:1)

尝试以下代码

var html = @"<html>
<article class=""swiper-slide"" itemscope itemtype=""http://schema.org/Movie"" 
            data-list=""Home - Highlights""
            data-name=""Thor1""
            data-id=""19730""
            data-brand=""Disney""
            data-position=""2""
            ></article>
<article class=""swiper-slide"" itemscope itemtype=""http://schema.org/Movie"" 
            data-list=""Home - Highlights""
            data-name=""Thor2""
            data-id=""19730""
            data-brand=""Disney""
            data-position=""2""
            ></article>
<article class=""swiper-slide"" itemscope itemtype=""http://schema.org/Movie"" 
            data-list=""Home - Highlights""
            data-name=""Thor3""
            data-id=""19730""
            data-brand=""Disney""
            data-position=""2""
            ></article>
</html>";

var doc = new HtmlDocument();
doc.LoadHtml(html);

var selected = doc.DocumentNode.SelectNodes(@"//article[@data-name=""Thor1""]/@data-name");

foreach (var node in selected) {
    Console.WriteLine(node.InnerText);
}

这将输出

Thor1

答案 1 :(得分:0)

int Swipers = 0;
            HtmlWeb _Web = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument htmldoc = _Web.Load(Url);
            htmldoc.OptionFixNestedTags = true;
            try
            {
                foreach (HtmlNode x in htmldoc.DocumentNode.SelectNodes(@"//article[@data-name]"))
                {
                    // var op = x.SelectSingleNode("./data-name");
                    //  var op = x.SelectNodes("div[@class='data-name']");
                    string result = x.GetAttributeValue("data-name", "null").ToLower();


                    if (result.Contains("thor"))
                    {
                       // System.Diagnostics.Process.Start(Url);
                        MessageBox.Show("It Appears!");
                        sendEmail();
                    }
                    Console.WriteLine(result);
                    Swipers++;
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Cant get info!");
            }

我不知道这是否是获得我想要的最佳方式,但是我现在可以为我工作。