2016-07-04 21 views
-1

我需要一點支持。我用C#一個網站抓取。下面是一個簡短的HTML 什麼我需要:HtmlAgilityPack搜索線使用下一行

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

是否有可能與HtmlAgilityPackFirstnameLastname?問題class="cf"class="labelText ohneFeldhilfe"在HTML中存在多次。我認爲搜索整行<span class="labelText ohneFeldhilfe">Name</span>是必要的。

感謝您的支持

回答

1

您可以使用LINQ或XPath。在這裏,我已經用LINQ完成了它:

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

感謝您的回覆。但我有不止一次的DIV標籤,我只需要名字和姓氏。 – Thomas

+0

需要看到更多的html,然後 – Robert

+0

我改變了上面的HTML – Thomas

0

我已經解決了。

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