• 根据新浪天气API获取各地天气状况(Java实现)


    1.代码块
    package com.quickmanager.util;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.FileInputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    /**
     * 解析xml文档,包括本地文档和url
     * @author cyxl
     * @version 1.0 2012-05-24
     * @since 1.0
     *
     */
    public class XmlParser {
    	InputStream inStream;
    	Element root;
    
    	public InputStream getInStream() {
    		return inStream;
    	}
    
    	public void setInStream(InputStream inStream) {
    		this.inStream = inStream;
    	}
    
    	public Element getRoot() {
    		return root;
    	}
    
    	public void setRoot(Element root) {
    		this.root = root;
    	}
    
    	public XmlParser() {
    	}
    
    	public XmlParser(InputStream inStream) {
    		if (inStream != null) {
    			this.inStream = inStream;
    			DocumentBuilderFactory domfac = DocumentBuilderFactory
    					.newInstance();
    			try {
    				DocumentBuilder domBuilder = domfac.newDocumentBuilder();
    				Document doc = domBuilder.parse(inStream);
    				root = doc.getDocumentElement();
    			} catch (ParserConfigurationException e) {
    				e.printStackTrace();
    			} catch (SAXException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	public XmlParser(String path) {
    		InputStream inStream = null;
    		try {
    			inStream = new FileInputStream(path);
    		} catch (FileNotFoundException e1) {
    			e1.printStackTrace();
    		}
    		if (inStream != null) {
    			this.inStream = inStream;
    			DocumentBuilderFactory domfac = DocumentBuilderFactory
    					.newInstance();
    			try {
    				DocumentBuilder domBuilder = domfac.newDocumentBuilder();
    				Document doc = domBuilder.parse(inStream);
    				root = doc.getDocumentElement();
    			} catch (ParserConfigurationException e) {
    				e.printStackTrace();
    			} catch (SAXException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	public XmlParser(URL url) {
    		InputStream inStream = null;
    		try {
    			inStream = url.openStream();
    		} catch (IOException e1) {
    			e1.printStackTrace();
    		}
    		if (inStream != null) {
    			this.inStream = inStream;
    			DocumentBuilderFactory domfac = DocumentBuilderFactory
    					.newInstance();
    			try {
    				DocumentBuilder domBuilder = domfac.newDocumentBuilder();
    				Document doc = domBuilder.parse(inStream);
    				root = doc.getDocumentElement();
    			} catch (ParserConfigurationException e) {
    				e.printStackTrace();
    			} catch (SAXException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	/**
    	 * 
    	 * @param nodes
    	 * @return 单个节点多个值以分号分隔
    	 */
    	public Map<String, String> getValue(String[] nodes) {
    		if (inStream == null || root==null) {
    			return null;
    		}
    		Map<String, String> map = new HashMap<String, String>();
    		// 初始化每个节点的值为null
    		for (int i = 0; i < nodes.length; i++) {
    			map.put(nodes[i], null);
    		}
    
    		// 遍历第一节点
    		NodeList topNodes = root.getChildNodes();
    		if (topNodes != null) {
    			for (int i = 0; i < topNodes.getLength(); i++) {
    				Node book = topNodes.item(i);
    				if (book.getNodeType() == Node.ELEMENT_NODE) {
    					for (int j = 0; j < nodes.length; j++) {
    						for (Node node = book.getFirstChild(); node != null; node = node
    								.getNextSibling()) {
    							if (node.getNodeType() == Node.ELEMENT_NODE) {
    								if (node.getNodeName().equals(nodes[j])) {
    									//String val=node.getFirstChild().getNodeValue();
    									String val = node.getTextContent();
    									System.out.println(nodes[j] + ":" + val);
    									// 如果原来已经有值则以分号分隔
    									String temp = map.get(nodes[j]);
    									if (temp != null && !temp.equals("")) {
    										temp = temp + ";" + val;
    									} else {
    										temp = val;
    									}
    									map.put(nodes[j], temp);
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    		return map;
    	}
    
    }
    
    2.测试代码
    <pre name="code" class="html">public static void main(String[] args) {
    		String link = "http://php.weather.sina.com.cn/xml.php?city=%D6%D8%C7%EC&password=DJOYnieT8234jlsK&day=0";
    		URL url;
    		String path = "test.xml";
    		try {
    			url = new URL(link);
    			System.out.println(url);
    			// InputStream inStream= url.openStream();
    			// InputStream inStream=new FileInputStream(new File("test.xml"));
    			XmlParser parser = new XmlParser(url);
    			String[] nodes = {"status1","temperature1","temperature2"};
    			Map<String, String> map = parser.getValue(nodes);
    			System.out.println(map.get(nodes[0]));
    		} catch (MalformedURLException e) {
    			e.printStackTrace();
    		}
    
    	}
    3.结果
    
    
    <pre name="code" class="java">http://php.weather.sina.com.cn/xml.php?city=%D6%D8%C7%EC&password=DJOYnieT8234jlsK&day=0
    status1:阵雨
    temperature1:21
    temperature2:18
    阵雨
    
    
    


    转载学习作品,如若得罪版主。sorry。

    有需要的话以下有原链接!


    
    
  • 相关阅读:
    2017/3/27 morning
    2017/3/24 afternoon
    2017/3/24 morning
    2017/3/21 afternoon
    2017/3/21 morning
    2017/3/20 afternoon
    2017/3/20 morning
    2017/3/16 afternoon
    2017/3/16 morning
    2017/3/15afternoon
  • 原文地址:https://www.cnblogs.com/laohuihui/p/5308773.html
Copyright © 2020-2023  润新知