2016-11-17 6 views
0

ページ内の特定のリンクを取得するためにHTMLドキュメントを解析しようとしています。私はこれが最善の方法ではないかもしれないことは知っていますが、私はその内部のテキストによって必要とされるHTMLノードを見つけようとしています。ただし、HTMLには、フッターとナビゲーションバーの2つのインスタンスがあります。ナビゲーションバーからリンクが必要です。 HTMLの「フッター」が最初に来ます。私のコードは次のとおりです:html doc C#で特定のリンクを検索するHTMLアジリティパックを使用する

public string findCollegeURL(string catalog, string college) 
    { 
     //Find college 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(catalog); 
     var root = doc.DocumentNode; 
     var htmlNodes = root.DescendantsAndSelf(); 

     // Search through fetched html nodes for relevant information 
     int counter = 0; 
     foreach (HtmlNode node in htmlNodes) { 
      string linkName = node.InnerText; 
      if (linkName == colleges[college] && counter == 0) 
      { 
       counter++; 
       continue; 
      } 
      else if(linkName == colleges[college] && counter == 1) 
      { 
       string targetURL = node.Attributes["href"].Value; //"found it!"; // 
       return targetURL; 
      }/* */ 
     } 

     return "DID NOT WORK"; 
    } 

プログラムはif elseステートメントに入りますが、リンクを取得しようとするとNullReferenceExceptionが発生します。 なぜですか?必要なリンクを取得するにはどうすればよいですか?ここで

は、私がアクセスしようとしているHTMLドキュメント内のコードです:

<tr class> 
     <td id="acalog-navigation"> 
      <div class="n2_links" id="gateway-nav-current">...</div> 
      <div class="n2_links">...</div> 
      <div class="n2_links">...</div> 
      <div class="n2_links">...</div> 
      <div class="n2_links">...</div> 
       <a href="/content.php?catoid=10&navoid=1210" class"navbar" tabindex="119">College of Science</a> ==$0 
      </div> 

これは私が欲しいのリンクです:/content.php?catoid=10 & navoid = 1210

答えて

0

私はあなたがW 2のリンクをお持ちの場合は、コード

var link = doc.DocumentNode.SelectSingleNode("//a[text()='College of Science']") 
       .Attributes["href"].Value; 

の多くを書く代わりにを使いやすくするXPathを使用して検索します同じテキストi番目、2番目の1

var link = doc.DocumentNode.SelectSingleNode("(//a[text()='College of Science'])[2]") 
       .Attributes["href"].Value; 

私はそれとエラーが出ること

var links = doc.DocumentNode.Descendants("a") 
       .Where(a => a.InnerText == "College of Science") 
       .Select(a => a.Attributes["href"].Value) 
       .ToList(); 
+0

LINQのバージョンを選択します。 'HtmlNode'に 'SelectSingleNode'の定義が含まれていません –

+0

@AndreaS。どのバージョンを使用していますか?あなたの環境は何ですか? –

+0

私はVisual Studio 2015 –

関連する問題