html에서 텍스트를 추출하는 방법은 무엇입니까?

c# html-agility-pack

문제

html의 <body> 에있는 모든 텍스트를 추출해야한다는 요구 사항이 있습니다. 샘플 HTML 입력 : -

<html>
    <title>title</title>
    <body>
           <h1> This is a big title.</h1>
           How are doing you?
           <h3> I am fine </h3>
           <img src="abc.jpg"/>
    </body>
</html>

출력은 다음과 같아야합니다.

<html>
    <title>title</title>
    <body>
           <h1> This is a big title.</h1>
           How are doing you?
           <h3> I am fine </h3>
           <img src="abc.jpg"/>
    </body>
</html>

이 목적으로 만 HtmlAgility를 사용하고 싶습니다. 정규 표현식을 사용하지 마십시오.

HtmlDocument를로드하고 '// body'와 같은 xquery를 사용하여 본문 내용을 가져 오는 방법을 알고 있습니다. 하지만 내가 출력물에서 보여준 것처럼 html을 제거하는 방법은 무엇입니까?

미리 감사드립니다 :)

수락 된 답변

본문의 InnerText :

string html = @"
<html>
    <title>title</title>
    <body>
           <h1> This is a big title.</h1>
           How are doing you?
           <h3> I am fine </h3>
           <img src=""abc.jpg""/>
    </body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;

다음으로 공백과 새 줄을 접을 수 있습니다.

string html = @"
<html>
    <title>title</title>
    <body>
           <h1> This is a big title.</h1>
           How are doing you?
           <h3> I am fine </h3>
           <img src=""abc.jpg""/>
    </body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string text = doc.DocumentNode.SelectSingleNode("//body").InnerText;

그러나이 경우에 작동하는 동안 hello<br>world 또는 hello<i>world</i> 와 같은 마크 업은 InnerText 에 의해 helloworld 로 변환되어 태그가 제거됩니다. 마크 업뿐만 아니라 디스플레이가 CSS에 의해 결정되므로이 문제를 해결하는 것은 어렵습니다.


인기 답변

XPath 표현식 '//body//text()' 를 사용하여 모든 텍스트 노드를 선택하는 방법은 어떻습니까?




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