HTMLAgilityPack을 사용하여 페이지 텍스트 만 추출하기

.net c# html-agility-pack xml-parsing xpath

문제

좋아, 그래서 정말 HTMLAgilityPack에 사용되는 XPath 쿼리에 새로운입니다.

그래서이 페이지를 고려해 볼 수 있습니다 http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about- youou . 내가 원하는 것은 페이지 내용 만 추출하는 것입니다.

그래서 나는 먼저 스크립트와 스타일 태그를 제거합니다.

Document = new HtmlDocument();
        Document.LoadHtml(page);
        TempString = new StringBuilder();
        foreach (HtmlNode style in Document.DocumentNode.Descendants("style").ToArray())
        {
            style.Remove();
        }
        foreach (HtmlNode script in Document.DocumentNode.Descendants("script").ToArray())
        {
            script.Remove();
        }

그 후 // text ()를 사용하여 모든 텍스트 노드를 가져 오려고합니다.

foreach (HtmlTextNode node in Document.DocumentNode.SelectNodes("//text()"))
        {
            TempString.AppendLine(node.InnerText);
        }

그러나 나는 단지 텍스트를 얻는 것이 아니라 많은 / r / n 문자를 또한 얻고있다.

이 점에 관해서는 약간의 안내가 필요합니다.

인기 답변

scriptstyle 노드에 자식 노드 만있는 텍스트 노드가 있다고 생각하면이 XPath 표현식을 사용하여 script 또는 style 태그에없는 텍스트 노드를 가져올 수 있으므로 사전에 노드를 제거하지 않아도됩니다.

//*[not(self::script or self::style)]/text()

XPath의 normalize-space() 사용하여 공백 문자 노드 만 제외 할 수 있습니다.

//*[not(self::script or self::style)]/text()[not(normalize-space(.)="")]

또는 더 짧은

//*[not(self::script or self::style)]/text()[normalize-space()]

그러나 공백 문자를 앞뒤로 가질 수있는 텍스트 노드를 얻을 수 있습니다. @ aL3891에서 제안하는대로이 기능을 응용 프로그램에서 처리 할 수 ​​있습니다.



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