2016-11-27 1 views
1

В настоящее время я пытаюсь разобрать ссылку из HTML-документа, исходя из заголовка над ней, но независимо от того, что я пытаюсь, программа не может ее найти , Вот метод я, что не работает:Как найти ссылку в HTML под определенным заголовком И проанализировать ее

public string findMajorURL(string collegeURL, string major) 
    { 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(collegeURL); 
     var root = doc.DocumentNode; 
     var htmlNodes = root.Descendants(); 
     //Find html node containing the major heading 
     foreach(HtmlNode node in htmlNodes) 
     { 
      if (node.InnerText == major) 
      { 
       HtmlNode target = node.NextSibling; 
       List<string> links = target.Descendants("a").Select(a => a.Attributes["href"].Value).ToList(); 
       return links.First()+ "__IT WORKED__"; 
      } 
     } 
     return "Major not found"; 
    } 

Это то, что HTML выглядит, что я пытаюсь разобрать:

<div style="padding-left: 20px"> 
     <h3 id="ent1629">Biological Sciences </h3> 
     <a href="preview_entity.php?catoid=5&ent_oid=1629&returnto=818">Go to information for this department.</a> 
     <br> 
     <p>...</p> 
     <div id="data_c_1629" style="display: none">...</div> 
     <!--script language="javascript">hideshow(data_c_1630)</script--> 

основные входы пользователем должен соответствовать в рубрике «Биологические науки». Основа из заголовка, я хочу, чтобы получить ссылку под его, что в этом случае preview_entity.php catoid = 5 & ent_oid = 1629 & returnto = 818

ВНИМАНИЕ: Я не могу использовать XPath Withthe версия Visual Studio, которая у меня есть, поэтому я предполагаю, что использование LINQ каким-то образом будет лучшим способом, но опять же я не уверен.

EDIT Оказывается, что Внутренний текст не соответствует майору, однако я не вижу, как это возможно, поскольку я взял его непосредственно из html-кода. Любые идеи относительно того, что не так?

ответ

0

Согласно HTML сниппет размещены, node внутри ваших if блок ссылок <h3> элемент и target ссылки следующий родственный <h3> которая <a>. Тем не менее, вам не нужно делать target.Descendants("a"). Просто получить href атрибут из target непосредственно:

if (node.InnerText == major) 
{ 
    HtmlNode target = node.NextSibling; 
    return target.GetAttributeValue("href", "")+ "__IT WORKED__"; 
} 
+0

Я попытался это, но, видимо, даже не входя, если заявление:/Я не понимаю, почему внутренний текст не соответствует, потому что я даже взял внутренний текст непосредственно из html-документа, но он все еще не соответствует. –