1

を使用してページのテキストを取得したいHTMLAgilityPack。私はこれのためにいくつかのコードを持っています:

HtmlAgilityPack.HtmlWeb TheWebLoader = new HtmlWeb();
HtmlAgilityPack.HtmlDocument TheDocument = TheWebLoader.Load(textBox1.Text);

List<string> TagsToRemove = new List<string>() { "script", "style", "link", "br", "hr" };

var Strings = (from n in TheDocument.DocumentNode.DescendantsAndSelf()
               where !TagsToRemove.Contains(n.Name.ToLower())
               select n.InnerText).ToList();

textBox2.Lines = Strings.ToArray();

問題は、scriptタグの内容も返すことです。なぜそうなるのかわかりません。誰か助けてもらえますか?

4

1 に答える 1

3

あなたの問題は、InnerTextがあなたが期待するものを返さないという事実から来ています。

の:

<A>
    Text1
    <B>Text2</B>
</A>

それは戻ります:

Text1
Text2

次に、たとえば、ルートノードの場合、実行すると、などdocument.DocumentNode.InnerTextのすべてのテキストが表示されます。script

不要なタグをすべて削除することをお勧めします。

foreach (HtmlNode nodeToRemove in (from descendant in TheDocument.DocumentNode.Descendants()
                                   where TagsToRemove.Contains(descendant.Name)
                                   select descendant).ToList())
    nodeToRemove.Remove();

次に、テキスト要素のリストを取得します。

List<string> Strings = (from descendant in TheDocument.DocumentNode.DescendantsAndSelf().OfType<HtmlTextNode>()
                        select descendant.InnerText).ToList();
于 2013-01-28T21:54:29.537 に答える