HTML 민첩성 팩으로 중복 요소 체인 제거

c# html-agility-pack

문제

내 HTML 문서에서 모든 <br> 태그가 중복되거나 더 많이 발생하는 것을 제거하려고합니다. 이것은 내가 지금까지 (정말 바보 같은 코드)와 함께 올라온 것입니다 :

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 태그를 찾지 만 요소를 전혀 제거하지 않습니다.

수락 된 답변

내가 생각하기에 당신의 솔루션이 너무 복잡하다고 생각합니다.

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

다음 예제부터 시작해 보겠습니다.

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

이제 <br /> 노드를 찾고 중복 요소 체인을 제거합니다.

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>

인기 답변

어쩌면 당신이 할 수 htmlsource = htmlSource.Replace("<br /><br />", <br />);

아니면 이런 식으로

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



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.