首页 / C# / C#中HTML/XML处理及正则表达式
C#中HTML/XML处理及正则表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#中HTML/XML处理及正则表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2924字,纯文字阅读大概需要5分钟。
内容图文
HTML Parser
一个比较方便的html解析package是HtmlAgilityPack,可以按照如下图显示在Visual Studio中安装。
使用该包的一个简单实例代码如下:
public
static
bool
CrawlCategoryReviewInfo(string categoryUrl)
{
var resp = HttpUtils.GetResponseData(categoryUrl);
if (resp == null)
{
logger.Info("Failed to request the category page from Suning server!");
returnfalse;
}
HtmlDocument document = new HtmlDocument();
document.LoadHtml(resp);
HtmlNodeCollection collection = document.DocumentNode.SelectNodes("//div[@id=‘productTab‘]//li[contains(@class,‘item‘)]");
if (collection == null || collection.Count < 1) returnfalse;
foreach(HtmlNode prod in collection)
{
if (prod == null || prod.Attributes["name"] == null) continue;
string prodId = prod.Attributes["name"].Value;
if(prodId.StartsWith("000000000")) prodId = prodId.Substring(9);
HtmlNode commentNode = prod.SelectSingleNode(".//a[contains(@name,‘comment‘)]/i");
if (commentNode == null) continue;
int commentCount = int.Parse(commentNode.InnerText);
Console.WriteLine(prodId + "\t" + commentCount);
}
if (collection.Count < int.Parse(ConfigurationManager.AppSettings["CAT_PAGE_ITEM_NUM"]))
returnfalse;
returntrue;
}
需要特别注意的是,对于在HtmlNode内部找子HtmlNode所写的xpath,xpath需要在前面加上”.”,如上面的”.//a[contains(@name,’comment’)]/i”,否则可能会发现找的是全局的Node。
XML DOM
系统空间System.Xml.Linq中的XDocument可以帮助解析或者输出XML文件。
1) 加载解析XML:
var filePath = Path.Combine(path, "image_status.xml");
XDocument doc = XDocument.Load(filePath);
var pics = doc.Descendants("pic");
foreach (var pic in pics)
{
string url = (string)pic.Element("url");
string imgFile = (string)pic.Element("file");
processedImages.Add(url, imgFile);
}
2) 保存生成XML
var filePath = Path.Combine(path, "image_status.xml");
var docUpdate = new XElement("status");
foreach (var tuple in processedImages)
{
var item = new XElement("image");
item.Add(new XElement("url", tuple.Key));
item.Add(new XElement("file", tuple.Value));
docUpdate.Add(item);
}
docUpdate.Save(filePath);
正则表达式抽取
利用正则表达式来抽取信息,其实不同语言的逻辑都一样,语法略有不同。这里不做介绍,仅仅给出一个抽取的例子作为参考。注意每一个匹配部分会用”?<—>”开头来对该Group命名,后面取匹配的数据的时候就可以借助这个名字得到相应的匹配值。
public static void CrawlProductReviewInfo()
{
string resp = "satisfy({\"reviewCounts\":[{\"oneStarCount\":2,\"twoStarCount\":0,\"threeStarCount\":23,\"fourStarCount\":43,\"fiveStarCount\":431,\"againCount\":4,\"bestCount\":0,\"picFlagCount\":5,\"totalCount\":499,\"qualityStar\":4.8}],\"returnCode\":\"1\",\"returnMsg\":\"成功获取评价个数\"})";
Regex revRegex = new Regex("\"totalCount\":(?<comment>.*?),\"qualityStar\":(?<score>.*?)}");
MatchCollection mc = revRegex.Matches(resp);
if (mc.Count > 0)
{
var comment = decimal.Parse(mc[0].Groups["comment"].Value);
var score = decimal.Parse(mc[0].Groups["score"].Value);
}}
原文:http://blog.csdn.net/tanzhangwen/article/details/46549329
内容总结
以上是互联网集市为您收集整理的C#中HTML/XML处理及正则表达式全部内容,希望文章能够帮你解决C#中HTML/XML处理及正则表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。