Dom4j解析从页面拿到的流形式xml

读取真实的链接时,url传回来的不是现成的xml而是文件流,怎么转,往下看之。。。

 

抽象实体类

package service;

/**
 * 取得用户权限内所有节点的抽象实体对象
 * @author DWJ
 */

public class RealData {
	private String provinceName;
	private String cityName;
	private String zone;
	private String NodeId;//String
	private String NodeName;
	private String WrsDate;
	private String RevDate;
	private String CurSoilWater;//String
	private String AvgSoilWater;//String
	private String SoilTemp;
	private String LeafHumi;//String
	private String GroundWaterLevel;//String
	private String Atmos;//String
	private String AirTemp;//String
	private String AirHumi;//String
	private String CurWindSpeed;//String
	private String AvgWindSpeed;//String
	private String WindAngle;
	private String RainSpeed;//String
	private String RainContinue;//String
	private String RainStartDate;
	private String RainDay;//String
	private String RainMonth;//String
	private String RainYear;//String
	private String SolarRadiation;//String
	private String Ultraviolet;//String
	
	public String getProvinceName() {
		return provinceName;
	}
	public void setProvinceName(String provinceName) {
		this.provinceName = provinceName;
	}
	public String getCityName() {
		return cityName;
	}
	public void setCityName(String cityName) {
		this.cityName = cityName;
	}
	public String getZone() {
		return zone;
	}
	public void setZone(String zone) {
		this.zone = zone;
	}
	public String getNodeId() {
		return NodeId;
	}
	public void setNodeId(String nodeId) {
		this.NodeId = nodeId;
	}
	public String getNodeName() {
		return NodeName;
	}
	public void setNodeName(String nodeName) {
		NodeName = nodeName;
	}
	public String getWrsDate() {
		return WrsDate;
	}
	public void setWrsDate(String wrsDate) {
		WrsDate = wrsDate;
	}
	public String getRevDate() {
		return RevDate;
	}
	public void setRevDate(String revDate) {
		RevDate = revDate;
	}
	public String getCurSoilWater() {
		return CurSoilWater;
	}
	public void setCurSoilWater(String curSoilWater) {
		CurSoilWater = curSoilWater;
	}
	public String getAvgSoilWater() {
		return AvgSoilWater;
	}
	public void setAvgSoilWater(String avgSoilWater) {
		AvgSoilWater = avgSoilWater;
	}
	public String getSoilTemp() {
		return SoilTemp;
	}
	public void setSoilTemp(String soilTemp) {
		SoilTemp = soilTemp;
	}
	public String getLeafHumi() {
		return LeafHumi;
	}
	public void setLeafHumi(String leafHumi) {
		LeafHumi = leafHumi;
	}
	public String getGroundWaterLevel() {
		return GroundWaterLevel;
	}
	public void setGroundWaterLevel(String groundWaterLevel) {
		GroundWaterLevel = groundWaterLevel;
	}
	public String getAtmos() {
		return Atmos;
	}
	public void setAtmos(String atmos) {
		Atmos = atmos;
	}
	public String getAirTemp() {
		return AirTemp;
	}
	public void setAirTemp(String airTemp) {
		AirTemp = airTemp;
	}
	public String getAirHumi() {
		return AirHumi;
	}
	public void setAirHumi(String airHumi) {
		AirHumi = airHumi;
	}
	public String getCurWindSpeed() {
		return CurWindSpeed;
	}
	public void setCurWindSpeed(String curWindSpeed) {
		CurWindSpeed = curWindSpeed;
	}
	public String getAvgWindSpeed() {
		return AvgWindSpeed;
	}
	public void setAvgWindSpeed(String avgWindSpeed) {
		AvgWindSpeed = avgWindSpeed;
	}
	public String getWindAngle() {
		return WindAngle;
	}
	public void setWindAngle(String windAngle) {
		WindAngle = windAngle;
	}
	public String getRainSpeed() {
		return RainSpeed;
	}
	public void setRainSpeed(String rainSpeed) {
		RainSpeed = rainSpeed;
	}
	public String getRainContinue() {
		return RainContinue;
	}
	public void setRainContinue(String rainContinue) {
		RainContinue = rainContinue;
	}
	public String getRainStartDate() {
		return RainStartDate;
	}
	public void setRainStartDate(String rainStartDate) {
		RainStartDate = rainStartDate;
	}
	public String getRainDay() {
		return RainDay;
	}
	public void setRainDay(String rainDay) {
		RainDay = rainDay;
	}
	public String getRainMonth() {
		return RainMonth;
	}
	public void setRainMonth(String rainMonth) {
		RainMonth = rainMonth;
	}
	public String getRainYear() {
		return RainYear;
	}
	public void setRainYear(String rainYear) {
		RainYear = rainYear;
	}
	public String getSolarRadiation() {
		return SolarRadiation;
	}
	public void setSolarRadiation(String solarRadiation) {
		SolarRadiation = solarRadiation;
	}
	public String getUltraviolet() {
		return Ultraviolet;
	}
	public void setUltraviolet(String ultraviolet) {
		Ultraviolet = ultraviolet;
	}
}

 

开始解之:

package service;

import java.io.File;
import java.io.InputStream;
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.DOMReader;
import org.dom4j.io.SAXReader;

import impl.UserNodeImpl;

/**
 * 获取用户权限内所有节点实现
 * @author DWJ
 */
public class UserNodeInfo implements Serializable {//,UserNodeImpl
	/**
	 * @param allFileName xml文件的全路径 
	 * @return List<UserNode> 以实体对象为单位的数据集合 
	 * @throws DocumentException
	 * 解析xml文件存储到集合中
	 */
	public static List<UserNode> getAllNodes(String user,String pwd)throws DocumentException {
		List<UserNode> provinceList = new ArrayList<UserNode>();
		int provinceListSize = provinceList.size();
		SAXReader saxReader = new SAXReader();
		try {
			
			String testurl = "http://10.60.250.116/server/getnode.php?";
			if(user == null || user.length() == 0){
				testurl += "user=test";
			}else if(pwd == null || pwd.length() == 0){
				testurl += "&pwd=test";
			}else{
				testurl += "user="+user+"&pwd="+pwd;
			}
			//来 :这里咱不传本地的xml了  给它一个真正的url去让他解析一下
			String path = "http://www.yancao18.com/server/getnode.php?user=test&pwd=test";
			
	        URL url = new URL(path);
	        // No1.从网络中获取网页数据
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	        conn.setConnectTimeout(6* 1000);//设置连接超时xml 实体对象
	        if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
	        // No2.得到网络返回的输入流
	        InputStream inputStream = (InputStream) conn.getInputStream();
			//1.创建解析器工厂类:DocumentBuilderFactory
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			//2.创建解析器:DocumentBuilder
			DocumentBuilder db = dbf.newDocumentBuilder();
			//3.创建文档树模型Document
			org.w3c.dom.Document doc = db.parse(inputStream);
			//4.将w3c的Document转换为Dom4J的Document
			DOMReader domReader = new DOMReader();
			Document document = domReader.read((org.w3c.dom.Document) doc);
			//你是说他请求的url我要动态接收吗
			  下面无需改动
			Element root = document.getRootElement();
			//获取根节点下某节点的子节点
			List<Node> nodes = root.selectNodes("/root/pnode/province");
			Iterator iter = nodes.iterator();
			//循环获取数据
			while (iter.hasNext()) {
				UserNode provinceInfo = new UserNode();
				Map<String, List<String[]>> disMap = new HashMap<String, List<String[]>>();
				Map<String, List<String[]>> nodeMap = new HashMap<String, List<String[]>>();

				Element proviceElement = (Element) iter.next();

				String provinceId = proviceElement.elementText("pid");
				String provinceName = proviceElement.elementText("pname");
				provinceInfo.setProvinceId(provinceId);
				provinceInfo.setProvinceName(provinceName);
	 
				List<String[]> cityList = new ArrayList<String[]>();

				List<Node> cityNodes = proviceElement.selectNodes("cnode/city");
				Iterator cityIter = cityNodes.iterator();
				while (cityIter.hasNext()) {
					String[] cityInfo = new String[2];
					Element cityElement = (Element) cityIter.next();

					String cityId = cityElement.elementText("cid");
					String cityName = cityElement.elementText("cname");
					cityInfo[0] = cityId;
					cityInfo[1] = cityName;

					List<String[]> disList = new ArrayList<String[]>();
					String disKey = provinceId + "_" + cityId;

					List<Node> disNodes = cityElement.selectNodes("znode/zone");
					Iterator disIter = disNodes.iterator();
					while (disIter.hasNext()) {

						String[] disInfo = new String[2];

						Element disElement = (Element) disIter.next();

						String disNodeId = disElement.elementText("zid");
						String disNodeName = disElement.elementText("zname");
						disInfo[0] = disNodeId;
						disInfo[1] = disNodeName;

						List<String[]> nodeList = new ArrayList<String[]>();
						String nodeKey = provinceId + "_" + cityId + "_" + disNodeId;

						List<Node> nodeNodes = disElement.selectNodes("nnode/node");
						Iterator nodeIter = nodeNodes.iterator();
						while (nodeIter.hasNext()) {
							String[] nodeInfo = new String[2];

							Element nodeElement = (Element) nodeIter.next();

							String nodeNodeId = nodeElement.elementText("nid");
							String nodeNodeName = nodeElement.elementText("nname");
							nodeInfo[0] = nodeNodeId;
							nodeInfo[1] = nodeNodeName;

							nodeList.add(nodeInfo);
						}
						nodeMap.put(nodeKey, nodeList);
						disList.add(disInfo);
					}
					disMap.put(disKey, disList);
					cityList.add(cityInfo);
				}
				provinceInfo.setCities(cityList);
				provinceInfo.setDisMap(disMap);
				provinceInfo.setNodeMap(nodeMap);
				provinceList.add(provinceInfo);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return provinceList;
	} 

	/**
	 * 读取所有节点的 实体对象集合
	 * 这个方法是我用来将所有节点放到一个list里边循环输出的,与上边的不一样,上边返回的是一个对象集合
	 */
	//public List getAllNodes(String user,String pwd) {
	public static List getAllNode(String user,String pwd) {
		List list = new ArrayList();
		try {
			String url = "http://10.60.250.116/server/getnode.php?";
			if(user == null || user.length() == 0){
				url += "user=test";
			}else if(pwd == null || pwd.length() == 0){
				url += "&pwd=test";
			}else{
				url += "user="+user+"&pwd="+pwd;
			}
			//来 :这里咱不传本地的xml了  给它一个真正的url去让他解析一下
			String path = "http://www.yancao18.com/server/getnode.php?user=test&pwd=test";
			
			//把上边的解析类中给的path注掉,调这个方法就可以看到所有信息
			List<UserNode> userlist = getAllNodes("","");
			
			StringBuffer buffer = new StringBuffer();
			if (userlist == null || userlist.size() == 0) {
				System.out.println("没有数据");
				return null;
			} else {
				for (int i = 0; i < userlist.size(); i++) {
					UserNode provinceInfo = userlist.get(i);
					String provinceId =  provinceInfo.getProvinceId();
					String provinceName =  provinceInfo.getProvinceName();
					list.add(provinceId);
					list.add(provinceName);
					
					List<String[]> cities = provinceInfo.getCities();
					for (int j = 0; j < cities.size(); j++) {
						String[] city = cities.get(j);
						String cityId =  city[0];
						String cityName =  city[1];
						list.add(cityId);
						list.add(cityName);
						
						if (provinceInfo.getDisMap() == null || provinceInfo.getDisMap().size() == 0) {
							return null;
						} else {
							String key = provinceInfo.getProvinceId() + "_" + city[0];
							List<String[]> districts =  provinceInfo.getDisMap().get(key);
							for (int j1 = 0; j1 < districts.size(); j1++) {
								String[] district = districts.get(j1);
								String disId = district[0];
								String disName = district[1];
								list.add(disId);
								list.add(disName);
								
								if (provinceInfo.getNodeMap().toString() == null || provinceInfo.getNodeMap().size() == 0) {
									return null;
								} else {
									String key1 = provinceInfo.getProvinceId() + "_" + city[0] + "_" + district[0];
									List<String[]> nodes = provinceInfo.getNodeMap().get(key1);
									for (int k = 0; k < nodes.size(); k++) {
										String[] node = nodes.get(k);
										String nodeId = node[0];
										String nodeName = node[1];
										list.add(nodeId);
										list.add(nodeName);
									}
								}
							}
						}
					}
				}
			}
			System.out.println(buffer.toString());
			return list;
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
	
	public static void main(String args[]){
		List arrlist;
		try {
			arrlist = getAllNodes("","");
			int size = arrlist.size();
			System.out.println("==============   " + size);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}



 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值