`
邓斯林玟
  • 浏览: 25576 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dom解析xml实现省市区动态级联

阅读更多

dom解析xml实现省市区动态级联是一个项目中的一部分,项目是springMVC实现的,其配置文件这儿就不在说了,现只简单列出一些主要的代码。看懂需要有一定的springMVC基础

配置文件中的省的值

city.area.province=黑龙江,湖南

在action中

private @Value("${city.area.province}") String provinceStr;
model.addAttribute("provinceList", ManagerUtil.getSelectBean(provinceStr));//获取省的下拉列表

 

//根据省获取市
public void getCityListByProvince(@RequestParam("province") String province,
			Model model, HttpServletResponse response) {
		try {
			province = URLDecoder.decode(province, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		response.setCharacterEncoding("utf-8");
		getListValue("province", "city", province, response);
	}
//根据市获取区县
public void getAreaListByCity(@RequestParam("city") String city,
			Model model, HttpServletResponse response) {
		try {
			city = URLDecoder.decode(city, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		response.setCharacterEncoding("utf-8");
		getListValue("city", "area", city, response);
		
	}
//
private void getListValue(String type, String childType, String value, HttpServletResponse response) {
		StringBuilder sb = new StringBuilder();
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(new File(UserController.class.getResource("/").toString().substring(6) 
					+ "/city-area.xml"));
			NodeList nodeList = document.getElementsByTagName(type);
			
			for(int i=0; i<nodeList.getLength(); i++) {
				Element e = (Element) nodeList.item(i);
				String name = e.getAttribute("name");
				if(name.equals(value)){
					NodeList childList = e.getElementsByTagName(childType) ;
					for(int j=0; j<childList.getLength(); j++) {
						sb.append(",").append(((Element) childList.item(j)).getAttribute("name"));
					}
					break;
				}
			}
		}catch(SAXException  e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch(ParserConfigurationException  e) {
			e.printStackTrace();
		}
		try {
			response.getWriter().write(JsonUtil.toJsonString(ManagerUtil.getSelectBean(sb.substring(1).toString())));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

JsonUtil类的toJsonString方法

public static String toJsonString(Object o) {
		if(o instanceof Collection) {
			StringBuffer buf = new StringBuffer("");
			Object[] objs = JSONArray.fromObject(o).toArray();
			for (int i = 0; i < objs.length; i ++) {
				if(i!=0) buf.append(",");
				buf.append(JSONObject.fromObject(objs[i]).toString());
			}
			return "{totalCount:" + objs.length + ",root:[" + buf.toString() + "]}";
		}
		return JSONObject.fromObject(o).toString();
	}

 

ManagerUtil类中的getSelectBean方法

 

public static List<SelectBean> getSelectBean(String str) {
		List<SelectBean> selectBeanList = new ArrayList<SelectBean>();
		if (!StringUtils.isEmpty(str)) {
			for (String item : str.split(",")) {
				SelectBean selectBean = new SelectBean();
				selectBean.setLabel(item.trim());
				selectBean.setValue(item.trim());
				selectBeanList.add(selectBean);
			}
		}
		return selectBeanList;
	}

jsp主要部分

 

<script type="text/javascript">function changeCityList(obj) {
		var citySelect = $("#uCity");
		var areaSelect = $("#uArea");
		citySelect.empty();
		areaSelect.empty();
		citySelect.append("<option value=''>请选择市</option>");
		areaSelect.append("<option value=''>请选择区/县</option>");
		if($(obj).val() != '') {
			$.ajax({
	 			type: "POST",
	 			 url: '....../getCityListByProvince.do?province=' + 
	 					 encodeURIComponent(encodeURIComponent($(obj).val())),
	 			async:false,
	 			dataType:'text',
	 			success: function(json) {
	 				
	 				var data = (eval('(' + json + ')')).root;
	 				for(var i=0; i<data.length; i++){
	 					citySelect.append("<option value=" + data[i].value + ">" + data[i].label + "</option>");
					}
	 			}
	 		});
		}
	}
	
	function changeAreaList(obj) {
//		alert($(obj).val());
		var areaSelect = $("#uArea");
		areaSelect.empty();
		areaSelect.append("<option value=''>请选择区/县</option>");
		if($(obj).val() != ''){
			$.ajax({
	 			type: "POST",
	 			 url: '...../getAreaListByCity.do?city=' + 
	 					 encodeURIComponent(encodeURIComponent($(obj).val())),
	 			async:false,
	 			dataType:'text',
	 			success: function(json) {
	 	//			var areaSelect = $("#uArea");
	 				var data = (eval('(' + json + ')')).root;
	 				for(var i=0; i<data.length; i++){
	 					areaSelect.append("<option value=" + data[i].value + ">" + data[i].label + "</option>");
					}
	 			}
	 		});
		}
		
	}
</script>
<div class="rfm">
			<table>
			<tr>
			<th><span class="rq">*</span><label for="369bQT">省:</label></th>
			<td>
				<select id="uProvince" onchange="changeCityList(this)" name="uProvince" style="width:230px">
					<option value="">请选择省份</option>
					<c:forEach items="${provinceList }" var="province">
						<option value="${province.value }">${province.label }</option>
					</c:forEach>
				</select>
			</td>
			</tr>
			</table>
			</div>
			<div class="rfm">
			<table>
			<tr>
			<th><span class="rq">*</span><label for="369bQT">市:</label></th>
			<td>
				<select id="uCity" name="uCity" onchange="changeAreaList(this)" style="width:230px">
					<option value="">请选择市</option>
				</select>
			</td>
			</tr>
			</table>
			</div>
			<div class="rfm">
			<table>
			<tr>
			<th><span class="rq">*</span><label for="369bQT">区:</label></th>
			<td>
				<select id="uArea" name="uArea" style="width:230px">
					<option value="">请选择区/县</option>
				</select>
			</td>
			</tr>
			</table>
			</div>

city-area.xml的部分内容(这里主要是说明一下它的格式)

 

<?xml version="1.0" encoding="UTF-8" ?>  
<root name="中国">  
	<province name="黑龙江" id="黑龙江">
    	<city name="大庆市">  
			<area name="萨尔图区"/>
			<area name="龙凤区"/>
			<area name="让胡路区"/>
			<area name="红岗区"/>
			<area name="大同区"/>
			<area name="肇州县"/>
			<area name="肇源县"/>
			<area name="林甸县"/>
			<area name="杜尔伯特蒙古族自治县"/>
    	</city> 
    	<city name="七台河市">  
			<area name="桃山区"/>
			<area name="新兴区"/>
			<area name="茄子河区"/>
			<area name="勃利县"/>
    	</city>
	</province>
</root>

 

分享到:
评论

相关推荐

    js解析XML文件实现省市县三级级联下拉菜单

    总之,利用JavaScript解析XML文件实现省市县三级级联下拉菜单,主要涉及XML数据的获取、解析、DOM操作和事件监听。这一技术对于构建地理定位、地址选择等场景的应用非常实用,而且可以灵活地适应不同层次的分类数据...

    Ajax实现省市区三级级联Demo(数据库来自Mysql)

    这个“Ajax实现省市区三级级联Demo”是一个典型的前端与后端交互的实例,它展示了如何利用Ajax技术从MySQL数据库动态获取并显示省级、市级、区县级的数据,实现联动选择的效果。下面我们将详细探讨这一知识点。 ...

    省市区三级级联(jquery/xml)

    在实现省市区级联时,jQuery可以方便地处理DOM操作,监听用户的选择,并动态加载下级级联的数据。 XML(Extensible Markup Language)是一种数据交换格式,常用于存储结构化数据。在这种应用场景中,XML文件可能...

    XML省市级联

    1. **XML数据结构**:首先,我们需要创建一个XML文件来存储省市区的数据。每个省份将作为一个顶级元素,城市作为子元素。例如: ```xml 杭州 宁波 上海 南京 ``` 这样的结构便于我们读取和操作数据。...

    echart3 地图数据省市区三级级联demo

    7. **JSON 数据文件**:`map_json.jsp`可能是一个服务器端动态生成的JSON文件,包含省市区的数据结构,供JavaScript解析并显示在地图上。 8. **JavaScript 文件**:`map.js`是JavaScript代码文件,可能包含了...

    javascript实现省市地方级联实例

    在JavaScript编程中,实现省市区级联是...前端利用JavaScript的DOM操作、事件监听、JSON解析等技术实现动态级联效果,后端通过C#和.NET平台提供数据支持。理解并掌握这些知识点,对于开发交互丰富的网页应用至关重要。

    省市县三级级联的xml文件和读取方法

    本主题将深入探讨如何创建和读取包含省市县三级级联信息的XML文件。 首先,我们需要理解XML文件的基本结构。XML是一种标记语言,通过标签来描述数据。在省市县三级级联的XML文件中,每个省市县信息可以被封装为一个...

    省市县三级级联js+xml

    在这个名为“省市县三级级联js+xml”的压缩包中,我们主要会探讨如何使用JavaScript和XML来实现这样的功能。 JavaScript是一种广泛使用的客户端脚本语言,它可以在用户的浏览器上运行,用于增强网页的交互性和动态...

    Ajax实现省市区三级级联(数据来自mysql数据库)

    在本篇文档中,将会详细探讨如何利用Ajax技术,结合前端JavaScript和后端Java解析JSON技术,从MySQL数据库中抽取省市区三级行政区划数据,并实现网页端的级联选择功能。以下为详细介绍的知识点: 1. **Ajax技术**:...

    JS+XML 省市区 三级联动下拉框

    这个"JS+XML 省市区 三级联动下拉框"的实现涉及到了前端开发的核心技能,包括JavaScript的事件处理、DOM操作以及XML的数据解析,对于学习和提升Web开发能力非常有帮助。同时,它也体现了前后端分离的思想,XML作为...

    JS+XML 省市区三级联动 支持ie,firefox,Opera

    在这个项目中,JS将负责处理用户的选择事件,动态更新下拉菜单,实现省市区的联动效果。例如,当用户在“省份”下拉框中选择一个省份时,JS会根据选择的省份加载对应的市和区的列表,实现数据的实时更新。 XML...

    全国省市区,三级级联,无刷新,json数据源,省市级联例子

    在这个例子中,jQuery可能被用来处理DOM操作、事件监听以及Ajax请求,实现省市区三级联动的逻辑。 在提供的压缩包文件`demo`中,通常会包含HTML、CSS、JavaScript等文件,这些文件组合起来演示了如何使用jQuery和...

    级联菜单 省市县三级联动

    使用js+xmldom+xpath实现的三级联动菜单, 以一个国标的行政区划码的xml文件为例子,展示省市县三级联动,菜单的初始值在html的hidden字段设置了山东省-青岛市-平度市。 你可以把他换成你需要xml文件,或者xml字符...

    省市三级联动(XML)

    在IT领域,级联(Cascading)是一种常见的设计模式,尤其在前端开发中,用于实现数据的层次结构,如省市区的选择。本案例中提到的"省市三级联动(XML)"是一个基于XML(eXtensible Markup Language)的数据结构,...

    适应移动端的地址四级(省市区街道)联动选择

    这里,AJAX是异步 JavaScript 和 XML 的缩写,虽然现在更多的是与JSON数据格式配合使用,因为JSON更轻量且易于解析。 在描述中提到,部分数据是通过JSON文件外部引用的。JSON(JavaScript Object Notation)是一种...

    .net jquery无刷新级联菜单

    后端将返回省市区的数据,可能是JSON格式,便于前端解析。 在jQuery部分,我们可以使用`.change()`事件监听选择框的改变,当用户在省份选择框中选择一项时,触发AJAX请求,获取对应省份的城市列表。同样,当城市被...

    Asp.net+Js实现的全国最新省市区级联

    5. **数据库设计**:项目可能包含一个数据库,存储全国的省市区数据,包括ID、名称等字段,以便于查询和更新。 6. **前端模板引擎**:可能使用了一些前端模板引擎(如JQuery Templates或AngularJS),来渲染动态...

    Ajax级联下拉

    在项目中,我们需要创建一个表来存储省市区信息,可能包含`id`、`name`、`parent_id`等字段,其中`parent_id`用于表示省份和城市之间的层级关系。 MVC模式是软件设计中的一种经典架构模式,它将应用程序分为三个...

    json+select 下拉框级联菜鸟

    在级联下拉框中,JSON常用来存储级联关系的数据,如省市区的层级关系,每个省包含多个市,每个市包含多个区。 2. **jQuery库**:jQuery是一个强大的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax...

    经典Ajax省市级联菜单

    【经典Ajax省市级联菜单】是一个利用Ajax技术实现的交互式菜单系统,它通过与后台服务器的异步通信,实现了省市区数据的动态加载。在这个系统中,用户选择省份时,Ajax会向服务器发送请求,服务器响应后返回对应省份...

Global site tag (gtag.js) - Google Analytics