需要的包:dom4j-jar && jaxen -1.1 --beta-6.jar (基础包)dom4j 要基于 jaxen基础包
xml数据:
<?xml version="1.0" encoding="UTF-8" ?>
<china>
<province name="北京">
<city>东城区</city>
<city>西城区</city>
</province>
<province name="天津">
<city>和平区</city>
<city>河东区</city>
</province>
</china>
Province_Servlet:
package com.sxjyatc.Demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class Province extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
/*
* 拿到所有省份
*/
/**
* 1,得到xml 解析器
* 2,调用解析的读方法,传递一个流对象,得到Document对象
*/
try {
SAXReader reader = new SAXReader();
InputStream in = this.getClass().getResourceAsStream("/china.xml");//得到流对象
Document document = reader.read(in);
System.out.println(in);
List<Attribute> arrlist = document.selectNodes("//province/@name");
System.out.println(1);
StringBuilder sb = new StringBuilder();
for(int i=0;i<arrlist.size();i++){
sb.append(arrlist.get(i).getValue());
if(i<arrlist.size()-1){
sb.append(",");
}
}
resp.getWriter().print(sb);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Jsp:省份代码(市代码将在2中补全):
<script type="text/javascript">
//创建异步对象
function createXMLHttpRequest(){
try {
return new XMLHttpRequest();
} catch (e) {
try {
return ActvieXObject("Msxm12.XMLHTTP");
} catch (e) {
try {
return ActvieXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("浏览器不匹配");
}
}
}
};
window.onload = function(){
/*
ajax4步 请求Province ,得到所有省份的名称
使用每个省份名称创建一个<option>元素
*/
var xmlHttp = createXMLHttpRequest();
xmlHttp.open("get","<c:url value='/province'/>",true);
/*
3,发送请求
//如果是get请求 就写null,如果是post 就请响应体
*/
xmlHttp.send(null);
xmlHttp.onreadystatechange =function(){
if(xmlHttp.readyState ==4&&xmlHttp.status ==200){
//获取服务器的乡音g
var text = xmlHttp.responseText;
//使用逗号,分割得到数组
var arr = text.split(",");
//循环遍历每一个省份名称,每个名称生成一个option对象,添加到<selec>对象中
for(var i =0;i<arr.length;i++){
//创建一个指定元素
var op = document.createElement("option");
op.value=arr[i];
//创建节点
var textNode = document.createTextNode(arr[i]);
op.appendChild(textNode);
document.getElementById("p").appendChild(op);
}
}
};
};
</script>
<body>
<h1>省</h1>
<select name="province" id="p">
<option>==请选择省份==</option>
</select>
<br/>
<select name="city">
<option>==请选择市==</option>
</select>
</body>