2012-07-19 80 views
0

我试图从here(表中的冠军链接标题)获得所有名称的列表,但我没有成功..任何人都可以指示我这个代码有什么问题吗?如何获取所有链接标题?

谢谢!

var url = "http://leagueoflegends.wikia.com/wiki/List_of_champions"; 
var web = new HtmlWeb(); 
var doc = web.Load(url);    

foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table[3]/tr")) 
{ 
    HtmlNode item = table.SelectSingleNode("//a"); 
    Console.WriteLine(item.GetAttributeValue("title", false)); 
} 

UPDATE:

好吧,我得到它的工作只是罚款与此代码:

var url = "http://leagueoflegends.wikia.com/wiki/List_of_champions"; 
var web = new HtmlWeb(); 
var doc = web.Load(url);    

foreach (HtmlNode item in doc.DocumentNode.SelectNodes("//table[3]/tr/td/span/a")) 
{ 
    Console.WriteLine(item.Attributes["title"].Value); 
} 

return true; 

感谢您的帮助!

回答

1

请使用XPath这样

foreach (HtmlNode linkItem in doc.DocumentNode.SelectNodes("//table[3]/tr//a")) 
{ 
    Console.WriteLine(linkItem.Attributes["title"].Value()); 
    Console.WriteLine(linkItem.Attributes["alt"].Value()); 
} 
+0

引发一堆FormatExceptions>。 – argoneus 2012-07-19 13:15:03

+0

@argoneus在哪一行上,请你可以显示错误 – HatSoft 2012-07-19 13:15:50

+0

现在它工作正常,它是之前的编辑代码。那么,不是很好,它会打印每个名称两次出于某种原因超过我>> – argoneus 2012-07-19 13:17:26

1

我敲了一个快速和肮脏的例子,测试和完美的作品,你要有点虽然格式化结果:

protected void Page_Load(object sender, EventArgs e) 
{ 
     List<HtmlAgilityPack.HtmlNode> test = GetInnerTest(); 

     foreach (var node in test) 
     { 
      Response.Write("Result: " + node.InnerHtml.ToString()); 
     } 

} 

public List<HtmlAgilityPack.HtmlNode> GetInnerTest() 
{ 
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

    doc.OptionFixNestedTags = true; 
    doc.Load(requestData("http://leagueoflegends.wikia.com/wiki/List_of_champions")); 

    var node = doc.DocumentNode.Descendants("span").Where(d => d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("character_icon")).ToList(); 

    return node; 
} 


public StreamReader requestData(string url) 
{ 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

     StreamReader sr = new StreamReader(resp.GetResponseStream()); 

     return sr; 
} 

您需要下载HtmlAgilityPack并包含其参考。

+0

我明白这是如何工作的,除了一个问题: '很不习惯'Where'的语法(在GetInnerTest())中,它基本上是一个lambda? – argoneus 2012-07-19 13:38:46

+0

是的,它是linq/lambda。 [请阅读](http://www.dotnetperls.com/lambda)。 – dtsg 2012-07-19 13:40:10

相关问题