2016-11-27 2 views
1

Ich bin gerade dabei, einen Link von einem HTML-Dokument zu analysieren, basierend auf der Kopfzeile darüber, aber egal was ich versuche, kann das Programm es nicht finden . Hier ist die Methode, ich habe das nicht funktioniert:Wie finde ich einen Link in HTML unter einem bestimmten Header UND parse es

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

Dies ist, was die HTML so aussieht ich versucht bin zu analysieren:

<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--> 

Die Haupt die Benutzereingaben soll übereinstimmen die Überschrift, Biologische Wissenschaften. Basiert weg von der Kopfzeile, möchte ich den Link unter es zu bekommen, was in diesem Fall ist preview_entity.php catoid = 5 & ent_oid = 1629 & returnto = 818

WARNUNG:? Ich kann nicht XPath withthe verwenden Version von Visual Studio, die ich habe, so nehme ich an, mit LINQ irgendwie wäre der beste Weg zu gehen, aber wieder bin ich mir nicht sicher.

BEARBEITEN Es stellt sich heraus, dass der innere Text nicht mit dem Haupt übereinstimmt, aber ich sehe nicht, wie das möglich ist, wie ich es direkt aus dem HTML-Code nahm. Irgendwelche Ideen, was falsch ist?

Antwort

0

Nach dem HTML-Snippet geschrieben, node in Ihren if Blockreferenzen <h3> Element und target Referenzen nächste Geschwister von <h3> die <a> ist. Das heißt, Sie müssen target.Descendants("a") nicht tun. Nehmen Sie einfach href Attribut aus target direkt:

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

ich das versucht, aber anscheinend ist es nicht einmal die Eingabe if-Anweisung:/Ich verstehe nicht, warum der innere Text nicht passend oben ist, weil ich nahm sich sogar die Innen Text direkt aus dem HTML-Dokument, aber es stimmt immer noch nicht überein. –

Verwandte Themen