Morgan
Morgan

Reputation: 181

How to concatenate two nodes when using the HTML Agility Pack in a ASP.NET web app?s

I am using the agility pack to do some screens scraping and my code so far to get titles is:

foreach (HtmlNode title in root.SelectNodes("//html//body//div//div//div[3]//div//div//div//div[3]//ul//li[1]//h4"))
        {
            string titleString = "<div class=\"show\">" + title.InnerText + "</div>";
            shows.Add(titleString);
        }

Before the title I want a timestamp related to the title and it has the node

/html/body/div/div/div[3]/div/div/div/div[3]/ul/li[1]/ul/li/span

How can I get this value next to the title? So something like:

string titleString = "<div class=\"show\">" + time.InnerText + " - " + title.InnerText + "</div>";

Upvotes: 1

Views: 1392

Answers (1)

Ole Melhus
Ole Melhus

Reputation: 1929

Try to get the parent node first and then get both title and timestamp from the parent

        HtmlNodeCollection TvGuideCollection = doc.DocumentNode.SelectNodes(@"//ul[@class='results']//ul//li");
        List<string> shows = new List<string>();
        foreach (HtmlNode item in TvGuideCollection)
        {
            HtmlNode title = item.SelectSingleNode(".//a");
            HtmlNode time = item.SelectSingleNode(".//span[@class='stamp']");
            if (title != null && time != null)
            {
                string titleString = "<div class=\"show\">" + time.InnerText + " - " + title.InnerText + "</div>";
                shows.Add(titleString);
            }
        }

Updated to just get todays shows

            HtmlNode TvGuideToday = doc.DocumentNode.SelectSingleNode(@"//ul[@class='results']//ul");
            List<string> shows = new List<string>();
            foreach (HtmlNode item in TvGuideToday.SelectNodes(".//li")) 
            {
                HtmlNode title = item.SelectSingleNode(".//a");
                HtmlNode time = item.SelectSingleNode(".//span[@class='stamp']");
                if (title != null && time != null)
                {
                    string titleString = "<div class=\"show\">" + time.InnerText + " - " + title.InnerText + "</div>";
                    shows.Add(titleString);
                }
            }

Upvotes: 1

Related Questions