Web的XML文件解析

版权声明:转载请说明去处,文章仅供学习参考 https://blog.csdn.net/qq_38487155/article/details/82713927

这里使用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标签里的内容:

  1. getElementsByTagName("标签名")->获取Elements数组
  2. 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);
				}

猜你喜欢

转载自blog.csdn.net/qq_38487155/article/details/82713927