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字符集过滤器CharacterEncodingFilter
Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEnco ...
- [转载] Python的GIL是什么鬼,多线程性能究竟如何
原文: http://cenalulu.github.io/python/gil-in-python/ GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器( ...
- 09 高效的PL/SQL程序设计
程序包 Package 断开了依赖链 实验依赖关系: <1> 首先不使用包 -- 创建表 CREATE table t (x int); -- 创建视图 create view v as ...
- sysfs接口函数的建立_DEVICE_ATTR(转)
sysfs接口函数到建立_DEVICE_ATTR 最近在弄Sensor驱动,看过一个某厂家的成品驱动,里面实现的全都是sysfs接口,hal层利用sysfs生成的接口,对Sensor进行操作. 说道s ...
- vitamio框架
import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.MediaPla ...
- git本地文件回滚操作
今天有几个文件改在了其他分支上.需要回滚. 参考了下面两篇文章: Link Link 简单讲,分多个不同的阶段: 1. 用git status命令看,发现是unstaged,那么就是只在work ...
- IOS开发证书变成“此证书的签发者无效”解决方法
IOS开发证书全部变成无效,如下图 打包提示错误 解决方法: 1. 下载https://developer.apple.com/certificationauthority/AppleWWDRCA ...
- php中的 == 和 ===
== 是等值 1 和 ‘1’ 是相等的 === 要等值并且类型相等,比如 1 和 ‘1’ 是不相等的,只有 ‘1’ 和 ‘1’ 是相等的.哈哈哈. http://ihacklog.com/post ...
- wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问。
wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问. 因为做项目,多人分工,需要局域网内访问各自的项目. 然后安装了wampserver2.5,Ap ...
- EF Core » 影子属性
Caution:注意 This documentation is for EF Core. For EF6.x and earlier release see http://msdn.com/data ...