2016-11-11 3 views
0

は、私は、各段落複数の出現回数を超える重複したbrタグを削除するにはどうすればよいですか?

string html = @"paragraph 1 a dkahdk ahkdhadk.<br><br><br> 
<br> 
paragraph 2 adshkad hkasdhkasdh.<br> 
<br> 
paragraph 3 akdash dkjahiewry iwery.<br> 
<br><br> 
paragraph 4 ljsdlfjsldfj.<br> 
<br> 
<br> 
<br>";  

HtmlAgilityPack.HtmlDocument doc = new HtmlDocument(); 

doc.LoadHtml(html); 
var xpath = "//text()[not(normalize-space())]"; 
var emptyNodes = doc.DocumentNode.SelectNodes(xpath); 
foreach (HtmlNode emptyNode in emptyNodes) 
{ 
    emptyNode.Remove(); // remove \r\n 
} 
var nodes = doc.DocumentNode.SelectNodes("//br[following-sibling::br[3]]").ToList(); 
foreach (var node in nodes) 
{ 
    node.Remove(); 
} 

出力は、それがすべてbrを削除何とかであるためにせいぜい2 <br>を維持したいです。正しい出力は

paragraph 1 a dkahdk ahkdhadk.<br><br> 
paragraph 2 adshkad hkasdhkasdh.<br><br> 
paragraph 3 akdash dkjahiewry iwery.<br><br> 
paragraph 4 ljsdlfjsldfj.<br><br> 

答えて

0

でなければなりません.HtmlAgilityPackを使用するのではなく、単純な正規表現の置き換えで十分です。たとえば、複数ステッププロセスを使用します。

//use regex to find <br>, <br > or <br /> tags: 
//var toNewLines = new Regex(@"<br\s?/?>"); 
//var onlyNewLines = toNewLines.Replace(html, Environment.NewLine); 
//or, since all br tags are <br>: 
var onlyNewLines = html.Replace("<br>", Environment.NewLine); 

var regex = new Regex(@"([" + Environment.NewLine + "\t])+"); 

var result = regex.Replace(onlyNewLines, Environment.NewLine); 

var finalResult = result.Replace(Environment.NewLine, "<br /><br />" + Environment.NewLine); 
関連する問題