需求:完成一个城市和区号的xml配置文件

处理思路:通过HtmlAgilityPack解析一个区号页面,生产xml文件

页面:http://www.hljboli.gov.cn/html/code.html

代码:

 1   public void LoadUrl(string url)
 2         {
 3
 4             try
 5             {
 6                 //Tab1
 7                 this.webBrowser1.Url = new Uri(url);
 8
 9                 HtmlWeb web = new HtmlWeb();
10                 //不加这行中文会乱码
11                 web.OverrideEncoding = Encoding.Default;
12                 HtmlAgilityPack.HtmlDocument doc = web.Load(url);
13                 //通过反射获取 internal 字段值
14                 FieldInfo info = doc.GetType().GetField("Text", BindingFlags.Instance | BindingFlags.NonPublic);
15                 var text = info.GetValue(doc).ToString();
16                 //Tab2
17                 this.richTextBox1.Text = text;
18
19                 var sb = new StringBuilder();
20                 sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>").AppendLine();
21                 sb.Append("<codes>").AppendLine();
22
23                 //xpath表达式
24                 var provinceNodes = doc.DocumentNode.SelectNodes("//tr");
25
26                 //过滤重复的区号
27                 var tempList = new List<string>();
28                 foreach (var provinceNode in provinceNodes)
29                 {
30                     //xpath表达式
31                     var cityNodes = provinceNode.SelectNodes("td");
32
33                     if (cityNodes.Count == 1)
34                     {
35                         if (cityNodes[0].InnerText != "&nbsp;") //去除空白行
36                             sb.AppendFormat("<!--{0}-->", cityNodes[0].InnerText).AppendLine();
37                     }
38                     if (cityNodes.Count == 6)
39                     {
40                         if (cityNodes[1].InnerText != "长途区号")
41                         {
42                             if (!tempList.Contains(cityNodes[1].InnerText))
43                             {
44                                 sb.AppendFormat("<code name=\"{0}\" value=\"{1}\" />", cityNodes[0].InnerText, cityNodes[1].InnerText).AppendLine();
45                                 tempList.Add(cityNodes[1].InnerText);
46                             }
47
48                             if (cityNodes[3].InnerText != "&nbsp;" && !tempList.Contains(cityNodes[4].InnerText))//去除行不满情况
49                             {
50                                 sb.AppendFormat("<code name=\"{0}\" value=\"{1}\" />", cityNodes[3].InnerText, cityNodes[4].InnerText).AppendLine();
51                                 tempList.Add(cityNodes[4].InnerText);
52                             }
53                         }
54                     }
55                 }
56                 sb.Append("</codes>").AppendLine();
57
58                 this.richTextBox2.Text = sb.ToString();
59
60             }
61             catch (Exception)
62             {
63
64
65             }
66
67
68         }

View Code

注意:
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表达式获取节点元素

转载于:https://www.cnblogs.com/zhaobl/p/3575285.html

HtmlAgilityPack解析全国区号页面到XML相关推荐

  1. 全国区号与邮政编码XML文件

    全国区号与邮政编码xml文件 <?xml version="1.0" encoding="utf-8"?> <area Country=&qu ...

  2. 能够sqlload到ORACLE的全国区号

    从GOOGLE上找了很久都没有找到完整的.能够直接导入数据库的全国电话号码区号的文件,只有自己写一个啦,相对来说还算是比较全,但是好像少了899等少数几个新区号.   放到网上给大家共享,记得感谢我哦 ...

  3. iOS 开发 带区号的城市三级联动(xml解析)

    iOS 开发 带区号的城市三级联动(xml解析) demo下载地址: http://download.csdn.net/detail/qq_20176153/9514906

  4. 全国邮编区号大全和从word中读取内容保存到msql中的源程序

    在网上找了好久没找到全国邮编区号的数据,没办法自己整理了一下, 程序写的很烂 进攻交流使用,如果对你有所帮助,那是我的荣幸. 里面有word格式的全国编码区号数据 我自己写的源程序. mysql数据备 ...

  5. 全国行政区划数据大放送——包含邮政编码-电话区号-简拼-区划路径

    因为一些情况需要用到全国行政区划数据库,本身没有库的就自己在网上找,但是找到的基本上不是我想要的,因为只包含了基本信息, 最后自己下了一个原始库准备自己组装数据,网上的XX数据网啊,web servi ...

  6. python通过手机号(批量)解析出归属地、运营商、邮编、区号

    python解读出手机号的归属地.运营商.邮编.区号,此处是存储在excle表格里,xlsx文件内不能有中文名称,包括表头 from phone import Phone import xlrd im ...

  7. python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

  8. 网易有道 IP地址、邮编区号及城市查询、手机号码归属地和身份证 查询接口API

    http://blog.csdn.net/go_to_learn/article/details/8296412 具体有多少个接口,不得而知,目前网上搜索的就知道四个: 查询IP地址: http:// ...

  9. python身份证验证系统_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

最新文章

  1. 带哨兵的冒泡排序_冒泡排序的优化以及快排过程及优化
  2. 前端一HTML:十二:元素查找过程的详解
  3. ByteBuf主要继承关系图
  4. Java 中的位移运算符
  5. hyperterminal使用教程_如何在Win7中安装使用超级终端Hyper Terminal(转)
  6. ff14拆区后哪个服务器人最多,FF14拆区可以转服吗 拆区期间转服教程
  7. Android自定义实现FlowLayout
  8. 作者:蒋凡(1979-),男,百度外卖研发中心技术委员会主席、主任架构师,中国计算机协会专业会员。...
  9. 京东抽奖项目开发笔记
  10. iOS开发之oc(五)--成员变量(实例变量)
  11. 【BZOJ3048】Cow lineup,贪心+队列维护(或二分答案)
  12. 开课吧-Java常见面试题:重载和重写的区别?
  13. 05.java多线程问题
  14. mysql汽车品牌系列_爬取汽车之家汽车品牌型号系列数据
  15. 生态愿景与险企数字化进度——保险科技生态建设
  16. Java 获取文件的真实类型,修改后缀名也能识别出来
  17. 北京工业大学外网访问知网数据库方法
  18. Teams Tab App 分析
  19. 时间处理 - Joda
  20. word删除空白页面

热门文章

  1. Auto-tunning调研(1):TVM
  2. 毕业生找工作必看求职月历
  3. Flex皮肤设计简单实例教程
  4. 课程设计-基于JSP+Servlet的员工考勤管理系统
  5. 分拆一年 “两个惠普”回天乏术
  6. R语言学习笔记:生成随机数
  7. Go2Shell的安装与配置
  8. string和wstring之间转换的三种方法
  9. python修复老照片_10篇必读深度图像修复文章,珍贵老照片有救了!
  10. 分布式系统中接口的幂等性