HTMLAgilityPackを使用してページテキストを抽出する

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

質問

それでは、HTMLAgilityPackで使用されるXPathクエリが本当に新しくなりました。

だからこのページを検討してみてくださいhttp://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you 。私が望むのは、ページの内容だけを抽出し、それ以外のものは抽出しないことです。

だから私は最初にスクリプトとスタイルのタグを削除します。

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()を使用しようとしています。

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

しかし、私はテキストを取得していないだけでなく、数多くの/ r / n文字を取得しています。

私はこの点について少しガイダンスをお願いします。

人気のある回答

scriptノードとstyleノードに子ノードのテキストノードしかないと考えると、このXPath式を使用してscriptstyleタグにないテキストノードを取得することができます。そのため、事前にノードを削除する必要はありません。

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

XPathのnormalize-space()を使用して、空白のみのテキストノードをさらに除外できます。

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

または短い

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

しかし、先頭または末尾の空白を持つ可能性のあるテキストノードを取得します。 @ aL3891が示唆するように、これはアプリケーションで処理できます。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ