本文以解析全国省份、(市/区)、县为例(就是淘宝填写地址的选项)
我在这里使用 XmlDocument 通过 using System.Xml 命名空间
XmlDocument xml=new XmlDocument();//先实例化 XmlDocument
xml.Load(path);//path可以为相对路径或者为绝对路径
XmlNodeList province=xml.DocumentElement.ChildNodes;//下面图片中的<root>.......</root>中的root是根节点,<province>.......</province>中province是root子节点
//如果要迭代 first 当使用 foreach 时 要在前面给定元素的类型即是 XmlElement 类型
foreach (XmlElement province in provinces){
Console.WriteLine(province.GetAttribute("name"));//获取 province name="北京" 的北京,如果里面有其他的属性如age="23",sex="男",你可以使用province.GetAttribute("age")和province.GetAttribute("sex")
}
//如果这个节点下面还有节点你可以
foreach (XmlElement province in provinces){
XmlNodeList citys=province.ChildNodes;//获取这个节点下面的子节点
}
下面是我的代码
public static Dictionary<string,Dictionary<string,List<string>>> ReadAddress(string path) {
XmlDocument xml=new XmlDocument();
xml.Load(path);
XmlNodeList provinces=xml.DocumentElement.ChildNodes;//获取XML的根节点--省份
Dictionary<string,Dictionary<string,List<string>>> rprovince=new Dictionary<string, Dictionary<string, List<string>>>();
foreach (XmlElement province in provinces) {//对省份进行迭代
Dictionary<string,List<string>> rcity=new Dictionary<string,List<string>>();
XmlNodeList citys=province.ChildNodes;//获取当前省份下面的(市/区)的节点
foreach (XmlElement city in citys) {//对(市/区)进行迭代
List<string> rdistrict=new List<string>();
XmlNodeList districts=city.ChildNodes;//获取当前(市/区)下面的县节点
foreach (XmlElement district in districts) {//对县进行迭代
rdistrict.Add(district.GetAttribute("name"));
}
rcity.Add(city.GetAttribute("name"),rdistrict);
}
rprovince.Add(province.GetAttribute("name"),rcity);
}
return rprovince;
}