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

本文展示了如何在SpringMVC项目中使用DOM解析XML来实现省市区的动态级联选择。通过从配置文件读取省份数据,然后根据省份获取市,再根据市获取区县,实现下拉列表的联动效果。主要涉及URLDecoder解码、HttpServletResponse设置编码、JsonUtil转换及ManagerUtil处理数据等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的部分内容(这里主要是说明一下它的格式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值