我正在使用HtmlAgilityPack从网页中检索信息,目前正在使用它在按钮点击方法中使用ListView控件在页面上显示值。
protected void Button1_Click(object sender, EventArgs e)
{
string url = TextBox1.Text.ToString();
var webGet = new HtmlWeb();
var document = webGet.Load(url);
// Below code crawl the data and store in generic IEnumerable<T> fashion //
var TheWeb =
from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']//div[@class='media-data']")
from link in info.SelectNodes("h4//a").Where(x => x.Attributes.Contains("href"))
from content in info.SelectNodes("p").Where(y => y.HasAttributes != true)
from author in info.SelectNodes("p[@class='article-meta']//a[@rel='author']").Where(z => z.Attributes.Contains("href"))
from date in info.SelectNodes("p[@class='article-meta']//span")
select new
{
LinkURL = link.Attributes["href"].Value,
Text = content.InnerText,
Author = author.InnerText,
Date = date.InnerText
};
lvLinks.DataSource = TheWeb;
lvLinks.DataBind();
}
但现在我想将数据存储在SQL Server中,并希望使用某些功能运行代码(而不是点击按钮)。
为此我想以其他形式存储数据而不是IEnumerable&lt;&gt;使用LINQ提取值的样式。
请建议。
答案 0 :(得分:3)
您可以拥有结构
的自定义类public class ParseData
{
public string LinkURL { get; set; }
public string Text { get; set; }
public string Author { get; set; }
public string Date { get; set; }
}
使用您的查询填充
var TheWeb =
from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']//div[@class='media-data']")
from link in info.SelectNodes("h4//a").Where(x => x.Attributes.Contains("href"))
from content in info.SelectNodes("p").Where(y => y.HasAttributes != true)
from author in info.SelectNodes("p[@class='article-meta']//a[@rel='author']").Where(z => z.Attributes.Contains("href"))
from date in info.SelectNodes("p[@class='article-meta']//span")
select new ParseData
{
LinkURL = link.Attributes["href"].Value,
Text = content.InnerText,
Author = author.InnerText,
Date = date.InnerText
};
var parseData = TheWeb.ToList();
现在使用System.Xml.Serialization.XmlSerializer
以XML格式化这些数据。将此XML存储在数据库中,并在需要时进行检索。
Tutorial explaining how to Serialize object in XML and Deserialize back to object
希望这适合你。
答案 1 :(得分:1)
最少干扰方式:
var IcanbeQueried = myIEnumerable.AsQueryable();
然后你可以保留你拥有的代码,你只需将其转换为IQueryable就好了。