2016-07-04 16 views
-1

Ich brauche ein bisschen Unterstützung. Ich habe mit C# eine Website greifen. Hier ist ein kurzer HTML, was ich brauche:HtmlAgilityPack Suche Zeile verwenden nächste Zeile

<div class="cf"> 
    <span class="labelText ohneFeldhilfe">Name</span> 
    <p>Firstname Lastname</p> 
</div> 
<div class="cf"> 
    <span class="labelText ohneFeldhilfe">Created</span> 
    <p>04/04/2016</p> 
</div> 
<div class="cf"> 
    <span class="labelText ohneFeldhilfe">Edit</span> 
    <p>05/05/2016</p> 
</div> 

Ist es möglich, mit HtmlAgilityPack, um die Firstname und Lastname zu greifen? Das Problem, das class="cf" und das class="labelText ohneFeldhilfe" sind mehr als einmal im HTML vorhanden. Ich denke, dass es notwendig ist, nach der ganzen Reihe <span class="labelText ohneFeldhilfe">Name</span> zu suchen.

Danke für die Unterstützung

Antwort

1

Sie entweder LINQ oder XPath für diese verwenden können. Hier habe ich es mit LINQ gemacht:

var html = "<div class=\"cf\">" + 
      " <span class=\"labelText ohneFeldhilfe\">Name</span>" + 
      " <p>Firstname Lastname</p>" + 
      "</div>"; 
var doc = new HtmlDocument(); 
doc.LoadHtml(html); 

var paragraphs = doc.DocumentNode.Descendants("div") // Get all divs.. 
    .Where(d => d.Attributes.Contains("class") && d.Attributes["class"].Value == "cf") // .. that have a class called cf .. 
    .Select(d => d.Descendants("p").First()); // .. inside those divs select the first paragraph 

foreach (var paragraph in paragraphs) 
{ 
    var nameParts = paragraph.InnerText.Split(' '); 

    Console.WriteLine("First name: " + nameParts[0]); 
    Console.WriteLine("Last name: " + nameParts[1]); 
} 
+0

Vielen Dank für Ihre Antwort. Aber ich habe mehr als einmal DIV-Tags und brauche nur Vor- und Nachname. – Thomas

+0

würde mehr von der html dann sehen müssen – Robert

+0

Ich habe das HTML oben geändert – Thomas

0

Ich habe gelöst.

var paragraphs = document.DocumentNode.Descendants("div") 
    .Where(d => d.Attributes.Contains("class") && d.Attributes["class"].Value == "cf"); 

foreach (var paragraph in paragraphs) 
{ 
    if(paragraph.InnerText.StartsWith("Name")) { 
    Console.WriteLine("Found"); 
    }; 
} 
Verwandte Themen