最近一新项目要用到国内行政区划数据,bing了一下,已有网友提供sql版本数据下载,但在本地查看数据不够新,至少我老家所在市2010年改名儿了这数据也看不到。所以说呢还是自己动手丰衣足食。然后就有了这篇文章
see 中华人民共和国国家统计局>>行政区划代码
数据源找到了,拿回本地也简单,HttpWebRequest GET一次搞定。
通过查看html代码,可以找到很明显的规律.
<p class="MsoNormal" align="justify">110000 北京市</p><p class="MsoNormal" align="justify">110100 市辖区</p><p class="MsoNormal" align="justify">110101 东城区</p>
不难发现,
的个数决定了当前元素是省市还是区
string[] lines = html.Split(new string[] { "</p>" }, StringSplitOptions.RemoveEmptyEntries);string code = null, name= null,line = null;List<Node> nodes = new List<Node>();Node PRevCity = null;Node PrevProvince = null;for (int i = 0; i < lines.Length; i++){ Node nod = new Node(); line = ExtractHtml(lines[i], "align=/"justify/">", ""); code = line.Substring(0, line.IndexOf("&")); name = line.Substring(line.LastIndexOf(";")+1).Trim(); nod.code = code; nod.name = name; int timesOfSpaceOccure = CountString(line, " "); nod.spaces = timesOfSpaceOccure; if (timesOfSpaceOccure == 3) { nodes.Add(nod); PrevProvince = nod; PrevCity = null; } else { if (timesOfSpaceOccure > PrevProvince.spaces) { //下一级别 if (PrevCity != null && timesOfSpaceOccure > PrevCity.spaces) { if (PrevCity.cell == null) { PrevCity.cell = new List<Node>(); } PrevCity.cell.Add(nod); } else { //市 if (PrevProvince.cell == null) { PrevProvince.cell = new List<Node>(); } PrevProvince.cell.Add(nod); PrevCity = nod; } } } }
[{"code":"110000","name":"北京市","cell":[{"code":"110100","name":"市辖区","cell":[{"code":"110101","name":"东城区"},{"code":"110102","name":"西城区"}]}]},{"code":"440000","name":"广东省","cell":[{"code":"440300","name":"深圳市","cell":[{"code":"440301","name":"市辖区"},{"code":"440303","name":"罗湖区"}]}]}]
行政区划json文件下载
采集源码下载
新闻热点
疑难解答