用XML实现省市级联

XML文件
<?xml version="1.0" encoding="utf-8" ?>
<address>
<province name="福建" key="1">
<city name="龙岩" key="1">龙岩</city>
<city name="厦门" key="2">厦门</city>
<city name="漳州" key="3">漳州</city>
<city name="泉州" key="4">泉州</city>
</province>
<province name="湖北" key="2">
<city name="武汉" key="1">武汉</city>
<city name="黄冈" key="2">黄冈</city>
<city name="黄冈" key="3">宜昌</city>
</province>
<province name="四川" key="3">
<city name="成都" key="1">成都</city>
<city name="绵阳" key="2">绵阳</city>
<city name="德阳" key="3">德阳</city>
</province>
</address>


实体类
public class Province
{
private int id;

public int Id
{
get { return id; }
set { id = value; }
}
private string name;

public string Name
{
get { return name; }
set { name = value; }
}
}


public class City
{
private int id;

public int Id
{
get { return id; }
set { id = value; }
}
private string name;

public string Name
{
get { return name; }
set { name = value; }
}
}


页面后台代码
string xmlPath = "xml文档路径";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlCity.Items.Insert(0, new ListItem("-----请选择------", "0"));
BindDDL(xmlPath);
}
}

private void BindDDL(string xmlPath)
{
List<Province> pList = GetProvince(xmlPath);
ddlProvince.DataSource = pList;
ddlProvince.DataTextField = "name";
ddlProvince.DataValueField = "id";
ddlProvince.DataBind();
ddlProvince.Items.Insert(0, new ListItem("---------请选择-------", "0"));
}
/// <summary>
/// 从XML文档里读取省份
/// </summary>
/// <param name="xmlPath"></param>
/// <returns></returns>
private List<Province> GetProvince(string xmlPath)
{
List<Province> provinces = new List<Province>();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
XmlNode root = xmlDoc.SelectSingleNode("address");

XmlNodeList xnl = root.ChildNodes;
foreach (XmlNode provinceNode in xnl)
{
XmlElement xe = (XmlElement)provinceNode;
Province p = new Province();
p.Id = Convert.ToInt32( xe.GetAttribute("key"));
p.Name = xe.GetAttribute("name");
provinces.Add(p);
}
return provinces;
}

/// <summary>
/// 根据省份读取城市
/// </summary>
/// <param name="xmlPath"></param>
/// <param name="p"></param>
/// <returns></returns>
private List<City> GetCityByP(string xmlPath, string p)
{
List<City> cList = new List<City>();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
XmlNode root = xmlDoc.SelectSingleNode("address");
XmlNodeList xnl = root.ChildNodes;

foreach (XmlNode node in xnl)
{
XmlElement xe = (XmlElement)node;
if (xe.GetAttribute("key") == p)
{
foreach (XmlNode node2 in node.ChildNodes)
{
XmlElement xe2 = (XmlElement)node2;
City c = new City();
c.Id =Convert.ToInt32( xe2.GetAttribute("key"));
c.Name = xe2.GetAttribute("name");

cList.Add(c);
}
}
}

return cList;
}

protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
{
string p = ddlProvince.SelectedValue;
List<City> list = GetCityByP(xmlPath, p);
ddlCity.DataSource = list;
ddlCity.DataValueField = "id";
ddlCity.DataTextField = "name";
ddlCity.DataBind();
ddlCity.Items.Insert(0, new ListItem("-----请选择------", "0"));
}
最近的项目要用到全国省市数据,于是到网上找了一些。可是下载下来看一下,格式都不是我想要的。基本上都是分表的,省、市分开保存,有的还有地区表。而自己想要一个表的,或者是一个xml,或者是一个Json。 搜索过程中,找到了国家统计局的省市数据,看页面简单,正好最近在弄数据采集。以其下载别人的,还要扣金币、不如自己采集吧,一方面练习,另一方面也上传供下载,赚些金币,嘿嘿。 好了,牢骚说完了,说正事。 数据来源与国家统计局网站,网址是:http://www.stats.gov.cn/tjbz/xzqhdm/t20090626_402568086.htm (这些数据还包含了行政区域代码,就是身份证号码前6位,可以用来查询身份证归属地^_^) 这个页面数据是有规律的,每个省份包含在 标签内,而城市和地区则用分隔 我是的采集正则表达式是:(|)(\d{6})(\s*)([^<]*) 这里有几个地方需要注意,其实是他们发布数据时的一点点不规则的地方: 1.宁夏回族自治区, 开始时多了个 。上面说了省份是包含在 标签内,所以这个情况如果想只找出省份的话,用 是匹配不到的 2.有些地方的空格是用  ,有的地方是全角空格,有的地方是用半角空格,如果有用到空格的地方就注意一下咯,我在保存 xml 和 Json 时,就用到了空格,所以我都做替换了 要注意的就这两点而已,好了,我会把这段文字和 xml、Json 一起打包上传。 压缩包里面是全部写好的,可以直接用。 评论返还全部分数哦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值