2016-07-04 3 views
-1

少しサポートが必要です。私はC#のウェブサイトを持っています。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> 

それはFirstnameLastnameをつかむためにHtmlAgilityPackで可能です:ここで私は必要なものを短いHTMLのですか?問題は、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タグを2回以上持っており、FirstnameとLastnameだけが必要です。 – 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"); 
    }; 
} 
関連する問題