import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.safetys.customerform.xml.model.Area;
/**
*
* @author hehc
*
*/
public class AreaUtil {
public static final String FROM_XML = "xml";
private String from = FROM_XML;
private String xmlFileDirectory;
private Map<String,Area> areaMap = new HashMap<String, Area>(); // provinceCode, provinceArea
private AreaUtil(){
super();
}
public final static AreaUtil getInstance(String FROM, String xmlFileDirectory){
AreaUtil areaUtil = new AreaUtil();
areaUtil.setFrom(FROM);
areaUtil.setXmlFileDirectory(xmlFileDirectory);
areaUtil.init();
return areaUtil;
}
/**
* 解析xml文件
********************************************************
* template of xml: *
* <area name="国家"> *
* <first-area name="省" code=""> *
* <second-area name="市" code=""> *
* <third-area name="区" code=""></third-area> *
* </second-area> *
* </first-area> *
* </area> *
********************************************************
*/
private void init(){
if(from != null && from.equals(AreaUtil.FROM_XML)){
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
if(xmlFileDirectory == null)
throw new Exception("xml文件地址为空!");
Document doc = documentBuilder.parse(new FileInputStream(xmlFileDirectory));
Element areaRoot = doc.getDocumentElement();
// System.out.println(areaRoot.getAttribute("name"));
NodeList firstAreas = areaRoot.getChildNodes();
Map<String,Area> firstAreaMap = new HashMap<String, Area>();
for(int i = 0; i < firstAreas.getLength(); i++){//遍历first-area标签
Area firstArea = new Area();
Node firstNode = firstAreas.item(i);
if(firstNode.getNodeType() == Node.ELEMENT_NODE){
firstArea.setName(firstNode.getAttributes().
getNamedItem("name").getNodeValue());
firstArea.setCode(firstNode.getAttributes().
getNamedItem("code").getNodeValue());
NodeList secondAreas = firstNode.getChildNodes();
Map<String,Area> secondAreaMap = new HashMap<String, Area>();
for(int j = 0; j < secondAreas.getLength(); j++){//遍历second-area标签
Area secondArea = new Area();
Node secondNode = secondAreas.item(j);
if(secondNode.getNodeType() == Node.ELEMENT_NODE){
secondArea.setName(secondNode.getAttributes().
getNamedItem("name").getNodeValue());
secondArea.setCode(secondNode.getAttributes().
getNamedItem("code").getNodeValue());
NodeList thirdAreas = secondNode.getChildNodes();
Map<String,Area> thirdAreaMap = new HashMap<String, Area>();
for(int k = 0; k < thirdAreas.getLength(); k++){//遍历third-area标签
Area thirdArea = new Area();
Node thirdNode = thirdAreas.item(k);
if(thirdNode.getNodeType() == Node.ELEMENT_NODE){
thirdArea.setName(thirdNode.getAttributes().
getNamedItem("name").getNodeValue());
thirdArea.setCode(thirdNode.getAttributes().
getNamedItem("code").getNodeValue());
thirdAreaMap.put(thirdArea.getCode(), thirdArea);
}
}
secondArea.setAreaMap(thirdAreaMap);
secondAreaMap.put(secondArea.getCode(), secondArea);
}
}
firstArea.setAreaMap(secondAreaMap);
firstAreaMap.put(firstArea.getCode(), firstArea);
}
}
areaMap = firstAreaMap;
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 返回当前国家区域的所有下一级(二级)行政单位(中国:省)
* @return Map<String provinceCode, String provinceName>
*/
public Map<String, String> getProvinces(){
Map<String, String> map = new HashMap<String, String>();
if(areaMap != null && !areaMap.isEmpty()){
Iterator<String> it = areaMap.keySet().iterator();
while(it.hasNext()){
String code = it.next();
map.put(code, areaMap.get(code).getName());
}
}
return map;
}
/**
* 返回当前国家区域、指定二级行政单位下的所有三级行政单位(中国:市)
* @param provinceCode
* @return Map<String cityCode, String cityName>
*/
public Map<String, String> getCities(String provinceCode){
Map<String, String> map = new HashMap<String, String>();
if(areaMap != null & !areaMap.isEmpty()){
Area firstArea = areaMap.get(provinceCode);
if(firstArea != null){
Map<String, Area> secondAreaMap = firstArea.getAreaMap();
if(secondAreaMap != null && !secondAreaMap.isEmpty()){
Iterator<String> it = secondAreaMap.keySet().iterator();
while(it.hasNext()){
String code = it.next();
map.put(code, secondAreaMap.get(code).getName());
}
}
}
}
return map;
}
/**
* 返回当前国家区域、指定二级行政单位下的所有四级行政单位(中国:区)
* @param provinceCode
* @param cityCode
* @return Map<String regionCode, String regionName>
*/
public Map<String, String> getRegions(String provinceCode, String cityCode){
Map<String, String> map = new HashMap<String, String>();
if(areaMap != null & !areaMap.isEmpty()){
Area firstArea = areaMap.get(provinceCode);
if(firstArea != null){
Map<String,Area> secondAreaMap = firstArea.getAreaMap();
if(secondAreaMap != null && !secondAreaMap.isEmpty()){
Area secondArea = secondAreaMap.get(cityCode);
if(secondArea != null){
Map<String, Area> thirdAreaMap = secondArea.getAreaMap();
if(thirdAreaMap != null && !thirdAreaMap.isEmpty()){
Iterator<String> it = thirdAreaMap.keySet().iterator();
while(it.hasNext()){
String code = it.next();
map.put(code, thirdAreaMap.get(code).getName());
}
}
}
}
}
}
return map;
}
/**
* 根据当前国家区域、指定某区域代码获取该区域名称
* @param areaCode
* @return String
*/
public String getAreaName(String areaCode) throws Exception{
if(areaMap != null && !areaMap.isEmpty()){
Iterator<String> it = areaMap.keySet().iterator();
while(it.hasNext()){
String firstCode = it.next();
if(firstCode.equals(areaCode)){
return areaMap.get(firstCode).getName();
}
Map<String, Area> secondAreaMap = areaMap.get(firstCode).getAreaMap();
if(secondAreaMap != null && !secondAreaMap.isEmpty()){
Iterator<String> it_ = secondAreaMap.keySet().iterator();
while(it_.hasNext()){
String secondCode = it_.next();
if(secondCode.equals(areaCode)){
return secondAreaMap.get(secondCode).getName();
}
Map<String, Area> thirdAreaMap = secondAreaMap.get(secondCode).getAreaMap();
if(thirdAreaMap != null && !thirdAreaMap.isEmpty()){
Iterator<String> it__ = thirdAreaMap.keySet().iterator();
while(it__.hasNext()){
String thirdCode = it__.next();
if(thirdCode.equals(areaCode)){
return thirdAreaMap.get(thirdCode).getName();
}
}
}
}
}
}
throw new Exception("未知区域");
}
return null;
}
private void setFrom(String from) {
this.from = from;
}
private void setXmlFileDirectory(String xmlFileDirectory) {
this.xmlFileDirectory = xmlFileDirectory;
}
分享到:
相关推荐
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
DOM解析XML文件例子DOM解析XML文件例子DOM解析XML文件例子
Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 自己使用 最好不要下载
Android使用Dom方式解析XML,虽然xml文件太大时不建议用dom方式解析,但是如果文件比较小,也不失为一种选择。项目中xml放在assets文件夹下,view绑定使用butterknife
用dom解析xml文件
DOM解析XML文档DOM解析XML文档DOM解析XML文档
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
本文件是关于dom4j解析xml文档时需要的包的集合
包括android代码实例以及个人对Dom解析xml文件的总结文档。
android为我们提供了多种解析方式,DOM解析,代码操作简单,一直为解析xml文件的一个不错的选择
XML格式文档对于程序开发具有很重要的作用,QT利用Dom方式解析XML可以很方便的对数据进行存储于传输
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器...
Java使用sax、dom、dom4j解析xml文档的代码,包含dom4j的jar包。
以一个实例来说明DOM解析XML文件的方法与过程。
java学习笔记——使用DOM解析XML和使用SAX解析XML
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
在Java平台中如何来使用DOM解析xml文件,
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析...当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
dom4j解析XML文档.ppt
使用Android自带的工具,解析xml文件内容,并显示在程序界面上