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
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
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 getSelectBean(String str) {
List selectBeanList = new ArrayList();
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主要部分
var citySelect = $("#uCity");
var areaSelect = $("#uArea");
citySelect.empty();
areaSelect.empty();
citySelect.append("请选择市");
areaSelect.append("请选择区/县");
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
citySelect.append("" + data[i].label + "");
}
}
});
}
}
function changeAreaList(obj) {
//alert($(obj).val());
var areaSelect = $("#uArea");
areaSelect.empty();
areaSelect.append("请选择区/县");
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
areaSelect.append("" + data[i].label + "");
}
}
});
}
}
*省: | 请选择省份 ${province.label } |
---|
*市: | 请选择市 |
---|
*区: | 请选择区/县 |
---|
city-area.xml的部分内容(这里主要是说明一下它的格式)