DOM4J 解析XML文件

本文详细解析了如何使用Java和DOM4J库从城市XML文件中读取天气信息,涵盖了从顶级节点到子节点的遍历过程,最终将weatherCode与城市名称映射为键值对。
<?xml version="1.0" encoding="UTF-8"?>

<China>
  <province id="01" name="北京">
    <city id="0101" name="北京">
      <county id="010101" name="北京" weatherCode="101010100"/>
      <county id="010102" name="海淀" weatherCode="101010200"/>
      <county id="010103" name="朝阳" weatherCode="101010300"/>
      <county id="010104" name="顺义" weatherCode="101010400"/>
      <county id="010105" name="怀柔" weatherCode="101010500"/>
      <county id="010106" name="通州" weatherCode="101010600"/>
      <county id="010107" name="昌平" weatherCode="101010700"/>
      <county id="010108" name="延庆" weatherCode="101010800"/>
      <county id="010109" name="丰台" weatherCode="101010900"/>
      <county id="010110" name="石景山" weatherCode="101011000"/>
      <county id="010111" name="大兴" weatherCode="101011100"/>
      <county id="010112" name="房山" weatherCode="101011200"/>
      <county id="010113" name="密云" weatherCode="101011300"/>
      <county id="010114" name="门头沟" weatherCode="101011400"/>
      <county id="010115" name="平谷" weatherCode="101011500"/>
    </city>
  </province>
</China>

 做了一个天气项目解析城市XML 

import java.io.File;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ParseXml {
	public Map<String,String> read() {
		Map<String,String> map = null;
		try {
			SAXReader reader = new SAXReader();
			URL resoucePath = PropertiesLoader.class.getClassLoader()
					.getResource("city_code.xml");
			File file = new File(resoucePath.getPath());
			Document document = reader.read(file);
			// 获取根节点
			Element root = document.getRootElement();

			Iterator<?> iter = root.elementIterator("province"); // 获取根节点下的子节点province
			map = new HashMap<String,String>();
			// 遍历province节点
			while (iter.hasNext()) {
				Element recordEle = (Element) iter.next();

				Iterator<?> iters = recordEle.elementIterator("city"); // 获取子节点province下的子节点city
				// 遍历province节点下的city节点
				while (iters.hasNext()) {
					Element itemEle = (Element) iters.next();

					Iterator<?> itor = itemEle.elementIterator("county"); // 获取子节点city下的子节点county
					// 遍历city下的子节点county
					while (itor.hasNext()) {
						Element countryEle = (Element) itor.next();
						String id = countryEle.attributeValue("weatherCode");
						String name = countryEle.attributeValue("name");
						map.put(id, name);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}

	public static void main(String[] args) {
		ParseXml parseXml = new ParseXml();
		Map<String,String> map = parseXml.read();
		for (Entry<String, String> entry: map.entrySet()) {

		    String key = entry.getKey();
		    String value = entry.getValue();
		    System.out.println(key+value);

		}
	}
}


中国省市城市sql表语句和xml语句 <?xml version="1.0" encoding="utf-8"?> <Provinces> <Province ID="1" ProvinceName="北京市">北京市</Province> <Province ID="2" ProvinceName="天津市">天津市</Province> <Province ID="3" ProvinceName="河北省">河北省</Province> <Province ID="4" ProvinceName="山西省">山西省</Province> <Province ID="5" ProvinceName="内蒙古自治区">内蒙古自治区</Province> <Province ID="6" ProvinceName="辽宁省">辽宁省</Province> <Province ID="7" ProvinceName="吉林省">吉林省</Province> <Province ID="8" ProvinceName="黑龙江省">黑龙江省</Province> <Province ID="9" ProvinceName="上海市">上海市</Province> <Province ID="10" ProvinceName="江苏省">江苏省</Province> <Province ID="11" ProvinceName="浙江省">浙江省</Province> <Province ID="12" ProvinceName="安徽省">安徽省</Province> <Province ID="13" ProvinceName="福建省">福建省</Province> <Province ID="14" ProvinceName="江西省">江西省</Province> <Province ID="15" ProvinceName="山东省">山东省</Province> <Province ID="16" ProvinceName="河南省">河南省</Province> <Province ID="17" ProvinceName="湖北省">湖北省</Province> <Province ID="18" ProvinceName="湖南省">湖南省</Province> <Province ID="19" ProvinceName="广东省">广东省</Province> <Province ID="20" ProvinceName="广西壮族自治区">广西壮族自治区</Province> <Province ID="21" ProvinceName="海南省">海南省</Province> <Province ID="22" ProvinceName="重庆市">重庆市</Province> <Province ID="23" ProvinceName="四川省">四川省</Province> <Province ID="24" ProvinceName="贵州省">贵州省</Province> <Province ID="25" ProvinceName="云南省">云南省</Province> <Province ID="26" ProvinceName="西藏自治区">西藏自治区</Province> <Province ID="27" ProvinceName="陕西省">陕西省</Province> <Province ID="28" ProvinceName="甘肃省">甘肃省</Province> <Province ID="29" ProvinceName="青海省">青海省</Province> <Province ID="30" ProvinceName="宁夏回族自治区">宁夏回族自治区</Province> <Province ID="31" ProvinceName="新疆维吾尔自治区">新疆维吾尔自治区</Province> <Province ID="32" ProvinceName="香港特别行政区">香港特别行政区</Province> <Province ID="33" ProvinceName="澳门特别行政区">澳门特别行政区</Province> <Province ID="34" ProvinceName="台湾省">台湾省</Province> </Provinces>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值