读取真实的链接时,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();
}
}
}