2012-07-03 2 views
3

내 HTML 문서에 < br> 태그가 중복되거나 더 많이 발생하는 것을 제거하려고합니다. 이것은 내가 지금까지 (정말 바보 같은 코드)로 왔어요 것입니다 :HTML 민첩성 팩으로 중복 요소 체인 제거

HtmlNodeCollection elements = nodeCollection.ElementAt(0) 
          .SelectNodes("//br"); 

if (elements != null) 
{ 
    foreach (HtmlNode element in elements) 
    { 
     if (element.Name == "br") 
     { 
      bool iterate = true; 
      while(iterate == true) 
      { 
       iterate = removeChainElements(element); 
      } 
     } 
    } 
} 

private bool removeChainElements(HtmlNode element) 
{ 
    if (element.NextSibling != null && element.NextSibling.Name == "br") 
    { 
     element.NextSibling.Remove(); 
    } 
    if (element.NextSibling != null && element.NextSibling.Name == "br") 
     return true; 
    else 
     return false; 
    } 
} 

코드는 BR에게 태그를 찾을 않습니다하지만 전혀 요소를 제거하지 않습니다.

답변

3

등이 htmlsource = htmlSource.Replace("<br /><br />", <br />);

아니면 뭔가를 할 수 내가 이해 아이디어가 올바른 것 같다하지만 당신도, 당신의 솔루션을 복잡하게 생각합니다.

모든 <br /> 노드를 먼저 찾고 이전 형제가 <br /> 노드 인 노드를 제거하는 것이 더 쉽다고 가정 해보십시오. 지금 <br /> 노드를 찾을 수

var html = @"<div>the first line<br /><br />the next one<br /></div>"; 
var doc = new HtmlDocument(); 
doc.LoadHtml(html); 

을 중복 요소의 체인 제거 :

의 다음 예제를 시작하자

var nodes = doc.DocumentNode.SelectNodes("//br").ToArray(); 
foreach (var node in nodes) 
    if (node.PreviousSibling != null && node.PreviousSibling.Name == "br") 
     node.Remove(); 

을하고 그것의 결과를 얻을 :

var output = doc.DocumentNode.OuterHtml; 

입니다.

<div>the first line<br>the next one<br></div> 
+0

고맙습니다. 이것을 수정 된 솔루션으로 해결했습니다. 분명히 HTML 민첩성 팩은
개의 노드를 하나의 br 노드로 해석 한 다음 빈 텍스트 노드와 br 노드를 차례로 해석합니다. 따라서 이전 노드 ** 두 단계를 다시 확인해야했습니다. 따라서 : **'element.PreviousSibling.PreviousSibling.Name == "br"'** 전에 null 검사로 해결했습니다. –

0

어쩌면 당신이

string html = "<br><br><br><br><br>"; 

    html = html.Replace("<br>", string.Empty); 

    html = string.Format("{0}<br />", html); 

    html = html.Replace(" ", string.Empty); 
    html = html.Replace("\t", string.Empty); 
+0

죄송합니다. 내가 원했던 부분이 명확하지 않을 수도 있지만 요소 중 하나를 제외한 모든 것을 제거해야합니다. 따라서 1000 개의 br 태그가있는 경우 모든 태그를 제거해야합니다. –

+0

모두 제거하고 수동으로 1을 추가하는 옵션이 있습니까? – JohnnBlade

+0

그럴 수는 있지만 웹 사이트를 구문 분석하고 HTML 형식이 잘못 되었기 때문에 HTML 민첩성 팩을 사용해야하므로
이 발생할 수 있으며 태그 사이에 많은 공백이있을 수도 있습니다. –