HtmlAgilityPack解析全国区号页面到XML
需求:完成一个城市和区号的xml配置文件
处理思路:通过HtmlAgilityPack解析一个区号页面,生产xml文件
页面:http://www.hljboli.gov.cn/html/code.html
代码:
![](/assets/blank.gif)
![](/assets/blank.gif)
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 != " ") //去除空白行 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 != " " && !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相关推荐
- 全国区号与邮政编码XML文件
全国区号与邮政编码xml文件 <?xml version="1.0" encoding="utf-8"?> <area Country=&qu ...
- 能够sqlload到ORACLE的全国区号
从GOOGLE上找了很久都没有找到完整的.能够直接导入数据库的全国电话号码区号的文件,只有自己写一个啦,相对来说还算是比较全,但是好像少了899等少数几个新区号. 放到网上给大家共享,记得感谢我哦 ...
- iOS 开发 带区号的城市三级联动(xml解析)
iOS 开发 带区号的城市三级联动(xml解析) demo下载地址: http://download.csdn.net/detail/qq_20176153/9514906
- 全国邮编区号大全和从word中读取内容保存到msql中的源程序
在网上找了好久没找到全国邮编区号的数据,没办法自己整理了一下, 程序写的很烂 进攻交流使用,如果对你有所帮助,那是我的荣幸. 里面有word格式的全国编码区号数据 我自己写的源程序. mysql数据备 ...
- 全国行政区划数据大放送——包含邮政编码-电话区号-简拼-区划路径
因为一些情况需要用到全国行政区划数据库,本身没有库的就自己在网上找,但是找到的基本上不是我想要的,因为只包含了基本信息, 最后自己下了一个原始库准备自己组装数据,网上的XX数据网啊,web servi ...
- python通过手机号(批量)解析出归属地、运营商、邮编、区号
python解读出手机号的归属地.运营商.邮编.区号,此处是存储在excle表格里,xlsx文件内不能有中文名称,包括表头 from phone import Phone import xlrd im ...
- python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...
大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...
- 网易有道 IP地址、邮编区号及城市查询、手机号码归属地和身份证 查询接口API
http://blog.csdn.net/go_to_learn/article/details/8296412 具体有多少个接口,不得而知,目前网上搜索的就知道四个: 查询IP地址: http:// ...
- python身份证验证系统_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...
大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...
最新文章
- 带哨兵的冒泡排序_冒泡排序的优化以及快排过程及优化
- 前端一HTML:十二:元素查找过程的详解
- ByteBuf主要继承关系图
- Java 中的位移运算符
- hyperterminal使用教程_如何在Win7中安装使用超级终端Hyper Terminal(转)
- ff14拆区后哪个服务器人最多,FF14拆区可以转服吗 拆区期间转服教程
- Android自定义实现FlowLayout
- 作者:蒋凡(1979-),男,百度外卖研发中心技术委员会主席、主任架构师,中国计算机协会专业会员。...
- 京东抽奖项目开发笔记
- iOS开发之oc(五)--成员变量(实例变量)
- 【BZOJ3048】Cow lineup,贪心+队列维护(或二分答案)
- 开课吧-Java常见面试题:重载和重写的区别?
- 05.java多线程问题
- mysql汽车品牌系列_爬取汽车之家汽车品牌型号系列数据
- 生态愿景与险企数字化进度——保险科技生态建设
- Java 获取文件的真实类型,修改后缀名也能识别出来
- 北京工业大学外网访问知网数据库方法
- Teams Tab App 分析
- 时间处理 - Joda
- word删除空白页面