前段时间公司在山铝地磅机房拷贝数据,把数据录入到自己的系统中,想将地磅的数据自动导入,我去看了下,发现导出文件格式是html,好事多磨的找到了HtmlAgilityPack这个神器。
代码比较乱,思路也没理清,不过最终效果不错。2015-01-25
这是需要导入的文件,需要的都是表格内部单元格的数据,下面是其中一行
下载导入dll的步骤就不赘述了,百度都有的
一、声明HtmlAgilityPack.htmlDocument对象,为该实例加载需要导入的html数据文件(好多做网页分析的是下载下来html到内存,然后由HtmlAgilityPack读取),然后选择你要获取节点标签,我这里是<font></font>,SelectNodes("//font[@*]"),可以自己定义,也可以多根据需求多定义几个,这样,所有font标签内的数据都读取到了节点数组HtmlNodeCollection内了,接下来就从这里根据自己需要获取需要的数据就行了。
1 using HtmlAgilityPack; 2 3 //HtmlAgilityPack自带加载html为htmlDocument 4 5 HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument(); 6 7 hd.Load(FilePath, UTF8Encoding.UTF8); 8 9 HtmlNode rootNode = hd.DocumentNode; 10 11 HtmlNodeCollection categoryNodeList = rootNode.SelectNodes("//font[@*]");//根据xpath获取节点树
二、简单介绍下如何在获取到的节点数组中遍历到自己需要的数据
1
//foreach是遍历效果最高的
//获取导入的总车数
foreach (HtmlNode item in categoryNodeList) 2 { 3 if (item.InnerText.Contains("车数")) 4 { 5 CountTemp = Int32.Parse(categoryNodeList[categoryNodeList.IndexOf(item) + 1].InnerText.Trim()); 6 break; 7 } 8 }
总结
为了搞这个找了好几个插件,都不如意,比如SgmlReaderDll、Winista.HtmlParser,效率和适用性上以及功能上都不如HtmlAgilityPack,正则表达式也试过,html太复杂了,正则表达式就不会写了,懒人勿喷。附上几个下载的插件http://pan.baidu.com/s/1bno4SUF