InnerText를 사용할 때 HTMLAgilityPack에서 단어를 연결하지 못하도록 방지

c# html-agility-pack

문제

HTML 문서에서 텍스트를 가져 오는 간단한 작업을 수행하려고합니다. 그래서 HTMLDoc.DocumentNode.InnerText를 사용하고 있습니다. 문제는 일부 사이트에서는 단어가 다른 태그에있을 때 단어 사이에 공백을 넣지 않는다는 것입니다. 이 경우 DocumentNode.InnerText는 해당 단어를 하나의 단어로 연결하므로 쓸모가 없습니다.

예를 들어, 그 라인을 포함하는 사이트를 읽으려고합니다.

<span>Ä°stanbul</span><ul><li><a href="i1.htm">Adana</a></li>

무의미한 "스탄불 아다 나"가 나타납니다.

HTMLAgilityPack 문서 나 Google에서 해결책을 찾지 못했습니다.

나는 무엇인가 놓치고 있니?

감사,

수락 된 답변

그것은하기 쉽습니다.

const string html = @"<span>Ä°stanbul</span><ul><li><a href=""i1.htm"">Adana</a></li>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
string result = string.Join(" ", doc.DocumentNode.Descendants()
  .Where(n => !n.HasChildNodes && !string.IsNullOrWhiteSpace(n.InnerText))
  .Select(n => n.InnerText));
Console.WriteLine(result); // prints "Ä°stanbul Adana"

인기 답변

코드 스 니펫이이 예제에서 중단됩니다.

const string html = @"<td><font size=""2"">abc </font><font size=""2"">(</font><font size=""2"">abc</font><font size=""2"">) </font><a href=""?query=abc"">abc</a>, abc<br><font size=""2"">abc </font>abc, <a href=""?query=abc"">abc</a>, abc, <a href=""?query=abc"">abc</a><br><font size=""2"">abc </font>abc abc, abc abc<br></td>";

그것은 join 절없이 멈추지 않습니다 (그러나 공백을 정확하게 두지 않습니다).




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