0

ここからすべての名前のリストを取得しようとしています(テーブル内のチャンピオン リンクのタイトル) が、うまくいきません。このコードの何が問題なのか教えてもらえますか?

ありがとうございました!

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

アップデート:

さて、このコードで問題なく動作するようになりました:

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;

ご協力いただきありがとうございます!

4

2 に答える 2

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をダウンロードし、それを機能させるためのリファレンスを含める必要があります。

于 2012-07-19T13:31:47.517 に答える
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());
}
于 2012-07-19T13:13:39.220 に答える