在html解析列表中选择一个项目。 HTML AglilityPack

时间:2014-09-28 18:26:08

标签: html windows-phone-8 windows-phone html-agility-pack

我希望能够选择每个项目是一个单独的列表。看看这个HTML:

<div class="services"> 
<a class="service selected" onclick="serviceNameClick('');" href="#">all</a>    
<a class="service" onclick="serviceNameClick('12');" href="#">12</a> 
<a class="service" onclick="serviceNameClick('14');" href="#">14</a>  
<a class="service" onclick="serviceNameClick('14C');" href="#">14C</a> 
<a class="service" onclick="serviceNameClick('N14');" href="#">N14</a>
<a class="service" onclick="serviceNameClick('14B');" href="#">14B</a>     
<a class="service" onclick="serviceNameClick('27');" href="#">27</a> 
<a class="service" onclick="serviceNameClick('12A');" href="#">12A</a> 
<a class="service" onclick="serviceNameClick('27C');" href="#">27C</a> 
<a class="service" onclick="serviceNameClick('N12');" href="#">N12</a> 
<a class="service" onclick="serviceNameClick('14A');" href="#">14A</a>  
</div>

能够将其显示为如下列表: 全部12 14 N14 14B 27 12A 27 N12 14A

我可以使用以下代码到达那里:

    string htmlPage = "";
        using (var client = new HttpClient())
        {
            htmlPage = await client.GetStringAsync("http://m.buses.co.uk/stop.aspx?stopid=" + stopIdVariable);


        }

        HtmlDocument htmlDocument = new HtmlDocument();
        htmlDocument.LoadHtml(htmlPage);

        List<Movie> movies = new List<Movie>();
        foreach (var a in htmlDocument.DocumentNode.SelectNodes("//div[starts-with(@class, 'content')]"))
        {

            Movie newMovie = new Movie();
            //newMovie.Cover = div.SelectSingleNode(".//div[@class='image']//img").Attributes["src"].Value;
           // newMovie.Title = div.SelectSingleNode(".//h4[@itemprop='name']").InnerText.Trim();
          //  newMovie.Summary = div.SelectSingleNode(".//div[@class='outline']").InnerText.Trim();
            newMovie.Summary = a.SelectSingleNode("div[starts-with(@class, 'service')]").InnerText.Trim();
            movies.Add(newMovie);


        }lstMovies.ItemsSource = movies;

这会在列表中显示,但我无法在该结果中选择单个项目,

它让我把它全部选为列表而不是每一个。

此外,目的是能够选择该值然后将该值用作文本字段。所以用户点击12然后我在应用程序中使用12。

需要改变什么?感谢

1 个答案:

答案 0 :(得分:1)

您可以尝试这种方式:

var links = htmlDocument.DocumentNode
                        .SelectNodes("//div[starts-with(@class, 'content')]//a[@class='service']")
foreach (var a in links)
{
    Movie newMovie = new Movie();
    newMovie.Summary = a.InnerText.Trim();
    movies.Add(newMovie);
}
lstMovies.ItemsSource = movies;

基本上,XPath作为SelectNodes()的参数传递给选择具有类等于<a>的单个"service"节点(您可以使用starts-with()或{{1更改类检查如有必要)。