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
Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...
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