Html Agility Pack 및 C #을 사용하여 HTML 소스의 공백을 제거하려면 어떻게합니까?

c# html html-agility-pack

문제

게시하기 전에이 스레드에서 솔루션을 시도 :

마크 업 사이에 HTML 소스의 공백을 제거 하시겠습니까?

다음은 내가 작업중인 HTML 스 니펫입니다.

<p>This is my text</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This is next text</p>

HTML 정리 도구를 사용하여 HTML을 정리합니다.

HtmlDocument doc = new HtmlDocument();
doc.Load(htmlLocation);
foreach (var item in doc.DocumentNode.Descendants("p").ToList())
{
    if (item.InnerHtml == "&nbsp;")
    {
        item.Remove();
    }
}

위 코드의 출력은 다음과 같습니다.

<p>This is my text</p>





<p>This is next text</p>

그래서 내 문제는 어떻게 HTML 소스에서 두 단락 사이의 여분의 공백을 제거 할 수 있습니다.

인기 답변

처음과 마지막 단락 사이의 텍스트 노드를 제거하십시오.

HTML :

var html = @"
<p>This is my text</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This is next text</p>";

그것을 분석하십시오 :

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var paragraphs = doc.DocumentNode.Descendants("p").ToList();
foreach (var item in paragraphs)
{
    if (item.InnerHtml == "&nbsp;") item.Remove();
}
var followingText = paragraphs[0]
    .SelectNodes(".//following-sibling::text()")
    .ToList();
foreach (var text in followingText) 
{
    text.Remove();
}

결과:

<p>This is my text</p><p>This is next text</p>

단락간에 줄 바꿈을 유지하려면 for 루프를 사용 하고 마지막 텍스트 노드를 제외한 모두에서 Remove() 를 호출 Remove() .

for (int i = 0; i < followingText.Count - 1; ++i)
{
    followingText[i].Remove();
}

결과:

<p>This is my text</p>
<p>This is next text</p>


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