Как получить доступ к подузлам с помощью htmlagilitypack в c # [на основе предложения from] - PullRequest
0 голосов
/ 05 января 2012

У меня есть HTML как:

    <div class="article-listing">
        <div class="media-data">

                             <h4><a href="http://thenextweb.com/media/2012/01/05/24symbols-white-labels-its-platform-to-give-any-organization-its-own-spotify-for-books/">24symbols White-Labels its 'Spotify for Books'</a></h4>
                             <p class="article-meta"><a href="http://thenextweb.com/media/">TNW Media</a> &#8226; <a href="http://thenextweb.com/author/martin/" title="Posts by Martin Bryant" rel="author">Martin Bryant</a>  &#8226; <span class="date" title="1325781355">January 5, 2012</span></a></p>

                             <p>24symbols, the &#8216;Spotify for books&#8217; startup that launched last summer, has been busy developing its service that allows users instant access to a library of books for a fixed fee&#8230;.</p>
                         </div></div>

I am using this xpath code for extracting required information :

    var webGet = new HtmlWeb();
                var document = webGet.Load(page);

                var infos = from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']//div[@class='media-data']")
                            from link in info.Descendants("a").Where(x => x.Attributes.Contains("href"))
                            from content in info.Descendants("p").Where(y => y.HasAttributes != true)
                            from author in info.Descendants("//p[@class='article-meta']//a[@rel='author']").Where(z => z.Attributes.Contains("href"))
                            from date in info.Descendants("//p[@class='article-meta']//span")
                            select new
                                {
                                   LinkURL = link.Attributes["href"].Value,
                                   Text = content.InnerText,
                                   Author = author.InnerText,
                                   Date = date.InnerText
                                };
    lvLinks.DataSource = infos;
                lvLinks.DataBind();   

Я использую элемент управления представления списка, чтобы показать данные на странице asp, используя <li> <%# Eval("LinkURL") %> - <%# Eval("Text") %> - <%# Eval("Author") %> </li>

Но это не работает ... Этоне отображает никаких ошибок и не отображает никаких данных на странице ..

Возможно, возникла проблема с выбором узлов с использованием различных предложений 'from'.

Пожалуйста, предложите мне Спасибо

1 Ответ

0 голосов
/ 06 января 2012

Я решил проблему ... Это было с выбором узлов. Нужно использовать SelectNodes вместо Descendants, а также мне нужно исправить теги, переданные в методе SelectNodes (). Мы можем использовать следующий код, и он будет работать нормально.

 var infos = from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']//div[@class='media-data']")
    from link in info.SelectNodes("h4//a").Where(x => x.Attributes.Contains("href"))
    from content in info.SelectNodes("p").Where(y => y.HasAttributes != true)
    from author in info.SelectNodes("p[@class='article-meta']//a[@rel='author']").Where(z => z.Attributes.Contains("href"))
    from date in info.SelectNodes("p[@class='article-meta']//span")

    select new
     {
       LinkURL = link.Attributes["href"].Value,
       Text = content.InnerText,
       Author = author.InnerText,
       Date = date.InnerText
     };

lvLinks.DataSource = infos; lvLinks.DataBind ();

Работает нормально ... Теперь не проблема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...