C# 获取网页的静态文本内容

C# 获取网页的静态文本内容,c#,asp.net,indexing,C#,Asp.net,Indexing,我的网站上有一个搜索栏,可以搜索网站中包含特定关键字的所有页面。这是通过查询索引服务器目录来实现的 我的问题如下,假设我搜索ASP.NET这个词,得到了3个包含ASP.NET的页面 我想显示关键字ASP.NET所在的行,以便用户获得上下文信息 使用System.Xml.Linq将页面读入XDocument。使用linq查询XDocument中的文本,然后返回XElement并进一步查询此元素。尝试解析文档,查找搜索词的出现处,然后提取周围的文本。这可以通过获取同一标记中的所有文本,或者获取同一句

我的网站上有一个搜索栏,可以搜索网站中包含特定关键字的所有页面。这是通过查询索引服务器目录来实现的

我的问题如下,假设我搜索ASP.NET这个词,得到了3个包含ASP.NET的页面


我想显示关键字ASP.NET所在的行,以便用户获得上下文信息

使用System.Xml.Linq将页面读入XDocument。使用linq查询XDocument中的文本,然后返回XElement并进一步查询此元素。

尝试解析文档,查找搜索词的出现处,然后提取周围的文本。这可以通过获取同一标记中的所有文本,或者获取同一句子中的所有文本来实现。您可以使用正则表达式来实现这一点

哪一种效果最好取决于您的需求和内容的结构。您还可以包括周围的句子,以实现提取文本的最小长度

下面是一个例子,试图在这个问题中提取包含疑问词的句子。它决不是完美的,但它说明了这个概念,应该让您开始:

using System;
using System.Net;
using System.Text.RegularExpressions;
class Program
{
    private const string url =
        "http://stackoverflow.com/questions/1655313/get-the-static-text-contents-of-a-web-page";
    private const string keyword = "question";

    private const string regexTemplate = ">([^<>]*?{0}[^<>]*?)<";
    static void Main(string[] args)
    {
        WebClient client = new WebClient();
        string html = client.DownloadString(url);
        Regex regex = new Regex(string.Format(regexTemplate,keyword) , RegexOptions.IgnoreCase);
        var matches = regex.Matches(html);
        foreach (Match match in matches)
            Console.WriteLine(match.Groups[1].Value);
    }
}

嗨,迈克!谢谢你的答复。但很抱歉,我忘了说明我使用的是.NET2.0,我没有LINQ支持!如果网页是有效的XHTML,那么不使用LINQ有什么出路吗?这将非常有用。否则,尝试将它们作为XML读取将导致异常。如果您不能使用LINQ,那么XmlDocument将帮助您。