HtmlAgilityPack解析全国区号页面到XML
需求:完成一个城市和区号的xml配置文件
处理思路:通过HtmlAgilityPack解析一个区号页面,生产xml文件
页面:http://www.hljboli.gov.cn/html/code.html
代码:
public void LoadUrl(string url)
{ try
{
//Tab1
this.webBrowser1.Url = new Uri(url); HtmlWeb web = new HtmlWeb();
//不加这行中文会乱码
web.OverrideEncoding = Encoding.Default;
HtmlAgilityPack.HtmlDocument doc = web.Load(url);
//通过反射获取 internal 字段值
FieldInfo info = doc.GetType().GetField("Text", BindingFlags.Instance | BindingFlags.NonPublic);
var text = info.GetValue(doc).ToString();
//Tab2
this.richTextBox1.Text = text; var sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>").AppendLine();
sb.Append("<codes>").AppendLine(); //xpath表达式
var provinceNodes = doc.DocumentNode.SelectNodes("//tr"); //过滤重复的区号
var tempList = new List<string>();
foreach (var provinceNode in provinceNodes)
{
//xpath表达式
var cityNodes = provinceNode.SelectNodes("td"); if (cityNodes.Count == )
{
if (cityNodes[].InnerText != " ") //去除空白行
sb.AppendFormat("<!--{0}-->", cityNodes[].InnerText).AppendLine();
}
if (cityNodes.Count == )
{
if (cityNodes[].InnerText != "长途区号")
{
if (!tempList.Contains(cityNodes[].InnerText))
{
sb.AppendFormat("<code name=\"{0}\" value=\"{1}\" />", cityNodes[].InnerText, cityNodes[].InnerText).AppendLine();
tempList.Add(cityNodes[].InnerText);
} if (cityNodes[].InnerText != " " && !tempList.Contains(cityNodes[].InnerText))//去除行不满情况
{
sb.AppendFormat("<code name=\"{0}\" value=\"{1}\" />", cityNodes[].InnerText, cityNodes[].InnerText).AppendLine();
tempList.Add(cityNodes[].InnerText);
}
}
}
}
sb.Append("</codes>").AppendLine(); this.richTextBox2.Text = sb.ToString(); }
catch (Exception)
{ } }
注意:
1.中文乱码,需要设置 web.OverrideEncoding = Encoding.Default;
2.通过反射访问HtmlDocument的内置字段Text获取body的内容
FieldInfo info = doc.GetType().GetField("Text", BindingFlags.Instance | BindingFlags.NonPublic);
var text = info.GetValue(doc).ToString();
3.通过xpath表达式获取节点元素
HtmlAgilityPack解析全国区号页面到XML的更多相关文章
- xml有哪些解析技术?区别是什么?
xml有哪些解析技术?区别是什么? Answer: 有DOM,SAX,STAX等 (1):DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且D ...
- XML有哪些解析方式有何优缺点?xml有哪些解析技术?区别是什么?
有DOM,SAX,STAX等 (1):DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XM ...
- 分享,iOS国家手机区号代码.plist
APP注册需要手机号码的时候,如果有在其他国家的时候需要填写手机区号 一份有国家名字和区号的plist 参照微信注册的时候 格式是 <Array> <Array> <Ar ...
- java利用爬虫技术抓取(省、市(区号\邮编)、县)数据
近期项目须要用到 城市的地址信息,但从网上下载的xml数据没有几个是最新的地址信息.....数据太老,导致有些地区不全.所以才想到天气预报官网特定有最新最全的数据.贴出代码,希望能给有相同困惑的朋友. ...
- Android 国际区号注册手机号编码 以及常用城市列表
附上 国际区号编码:我是定义到arrays.xml里面了 <?xml version="1.0" encoding="utf-8"?> <re ...
- 使用二分法查找mobile文件中区号归属地
#!/usr/bin/env python #coding:utf-8 ''' Created on 2015年12月8日 @author: DL @Description: 使用二分法查找mobil ...
- 由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作
原文同步至:http://www.waylau.com/from-jasperrpeorts-4-1-2-upgraded-to-5-1-2-parsing-of-flex-projects-to-t ...
- 解析好的静态页面.shtml浏览器无法解析.需要apache解析后再返回给浏览器
解析好的静态页面.shtml浏览器无法解析.需要apache解析后再返回给浏览器 让Apache支持SHTML(SSI)的配置方法 http.conf放开addtype text/html .shtm ...
- 生活常用类API调用的代码示例合集:邮编查询、今日热门新闻查询、区号查询等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 邮编查询:通过邮编查询地名:通过地名查询邮编 今日热门新闻查询:提 ...
随机推荐
- Spring JDBC主从数据库配置
通过昨天学习的自定义配置注释的知识,探索了解一下web主从数据库的配置: 背景:主从数据库:主要是数据上的读写分离: 数据库的读写分离的好处? 1. 将读操作和写操作分离到不同的数据库上,避免主服务器 ...
- Python学习笔记--XML的应用
XML的定义 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被 ...
- (六)C语言之typedef详解
1.typedef可以看作type define的缩写,顾名思义就是类型定义,也就是说它只是给已有的类型重新定义了一个方便使用的别名,并没有产生新的数据类型.typedef的使用与宏定义define有 ...
- myeclipse 配置svn资源库
只需在dropins文件夹里放入features,plugins两个文件夹:访问这个路径下载即可:http://pan.baidu.com/s/1dDnJKXF
- 20160808_Qt570安装
1.安装的目录为 “/opt/Qt5.7.0/Tools/QtCreator/bin” 2.建立软连接 [root@localhost bin]# ln -s /opt/Qt5.7.0/Tools/Q ...
- python操作mongodb之二聚合查询
#聚合查询 from pymongo import MongoClient db = MongoClient('mongodb://10.0.0.9:27017/').aggregation_exam ...
- (转)TCP、UDP、IP协议
原文地址:http://blog.chinaunix.net/uid-26833883-id-3627644.html 互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如 ...
- git reset 理解
http://www.open-open.com/lib/view/open1397013992747.html 一般在工作中用的比较多的是: git reset --hard <commitI ...
- Unity 5 中的全局光照技术详解(建议收藏)
本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING (文章较长,请耐心阅读)简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法, ...
- Unity视频播放的各种实现方式汇总
http://www.taidous.com/bbs/article-860-1.html Unity视频播放有很多种实现方式,可根据要求来选择适当的实现,这里总结一下: 1. MovieTextu ...