这里使用dom4j方式
准备工作:导入dom4j-1.6.1.jar、jaxen-1.1-beta-6.jar俩个包
1、解析成字符串,用逗号分隔发送给客户端
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
/*
* 1、解析xml文件,使用dom4j方式
* 2、返回至response的响应输出流
*/
//读取src目录下的资源文件获得流
InputStream input =this.getClass().getResourceAsStream("/china.xml");
// 创建saxReader对象
SAXReader reader = new SAXReader();
try {
// 通过read方法读取一个流, 转换成Document对象
Document document = reader.read(input);
//选取根元素China下的所有province元素下的name属性,返回一个List列表
List<Attribute> list=document.selectNodes("//province/@name");
StringBuffer sbBuffer=new StringBuffer();
for(int i=0;i<list.size();i++){//将name属性Attribute集合的值转为String,同时添加,作为分割
sbBuffer.append(list.get(i).getValue());
if(i<list.size()-1){
sbBuffer.append(",");
}
}
response.getWriter().print(sbBuffer);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
同样的jsp页面使用Ajax获取String时也需要使用
var text=xmlHttp.responseText;
在JSP页面操作返回的String值使用split(",")获得需要的数据数组,可使用其它符号作为分隔标识符(在解析时设置)。
var str=text.split(",");
//遍历获得的数据
for(var i=0;i<str.length;i++){
alert(str[i]);
}
2、解析成String类型但为XML格式,发送给客户端
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/xml;charset=utf-8");
InputStream input =this.getClass().getResourceAsStream("/china.xml");
String province =request.getParameter("province");
SAXReader reader = new SAXReader();
try {
Document document = reader.read(input);
//获取省份为name的province标签元素
Element element=(Element) document.selectSingleNode("//province[@name='"+province+"']");
//将标签对象转为String类型的xml
String cityString= element.asXML();
response.getWriter().print(cityString);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
此时jsp页面使用Ajax获取String时也需要使用,document对象与JavaScript的DOM的方法基本一致
var doc = xmlHttp.responseXML;
Ajax获取XML标签里的内容:
- getElementsByTagName("标签名")->获取Elements数组
- Elemen[i].textContent或者Elemen[i].text->获取标签元素的内容,i为索引值,textContent为火狐等浏览器使用,text
为IE等浏览器使用
例:
// 获取服务器的响应内容
var doc = xmlHttp.responseXML;
// 得到所有名为city的元素
var cityEleList = doc.getElementsByTagName("city");
// 循环遍历每个city元素
for(var i = 0; i < cityEleList.length; i++) {
var cityEle = cityEleList[i];//得到每个city元素
var cityName;
// 获取市名称
if(window.addEventListener) {//处理浏览器的差异
cityName = cityEle.textContent;//支持FireFox等浏览器
} else {
cityName = cityEle.text;//支持IE
}
// 使用市名称创建option元素,添加到<select name="city">中
var op = document.createElement("option");
op.value = cityName;
// 创建文本节点
var textNode = document.createTextNode(cityName);
op.appendChild(textNode);//把文本节点追加到op元素中
//把op添加到<select>元素中
citySelect.appendChild(op);
}