Как объединить два узла при использовании пакета HTML Agility Pack в веб-приложении ASP.NET? - PullRequest
0 голосов
/ 29 октября 2010

Я использую пакет гибкости для скрепления некоторых экранов, и мой код для получения заголовков:

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);
        }

Перед заголовком мне нужна временная метка, связанная с заголовком, и в ней есть узел

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

Как я могу получить это значение рядом с заголовком?Так что-то вроде:

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

1 Ответ

0 голосов
/ 29 октября 2010

Попробуйте сначала получить родительский узел, а затем получить заголовок и метку времени от родителя.

        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);
            }
        }

Обновлен, чтобы получать только сегодняшние шоу

            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);
                }
            }
...