Android开发:天气预报Dom解析
DOM是用与平台无关和语言无关的方式表示XML文档的官方W3C标准,DOM是以层次结构组织的节点或信息片段的集合。DOM是基于树的,DOM相对SAX来说简单,耗内存...
本次学习目标:了解DOM解析XML ,并用DOM解析谷歌提供的天气
谷歌提供的天气接口是 http://www.google.com/ig/api?hl=zh_CN&weather=wuhan 这个接口末尾是wuhan 即 "武汉" 的拼音,依次类推,北京的查询方式是把后面拼音换成beijing就行了,这个接口是查询武汉四天的天气。
根元素(Element)是 xml_api_reply 即树的根 然后往里面扩展。
我要获取节点forecas_conditions中的数据
DOM初始工作需要几个函数
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new InputStreamReader(lianJie(strUrl) )));
然后通过Document对象解析XML,解析XML时会用到节点,并取得他的值 用到类 NodeList ,Node. 下面开始上我的程序
- package com.study.weather;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.HttpURLConnection;
- import java.net.URL;
- 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.InputSource;
- import org.xml.sax.SAXException;
- public class Weather
- {
- public InputStream lianJie(String strUrl) throws IOException
- {
- URL url = new URL(strUrl);
- HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
- InputStream is = urlConnection.getInputStream();
- if(is!=null)
- {
- return is;
- }
- return null;
- }
- public void resolutionXML(String strUrl) throws ParserConfigurationException, SAXException, IOException
- {
- WeatherData wd = new WeatherData();
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = builderFactory.newDocumentBuilder();
- Document document = builder.parse(new InputSource(new InputStreamReader(lianJie(strUrl) )));
- // 得到xml_api_reply
- Element rootElement = document.getDocumentElement();
- System.out.println(rootElement.getNodeName());
- Node weatherNode = rootElement.getElementsByTagName("weather").item(0);
- // Node weatherNode = rootElement.getFirstChild();
- System.out.println(weatherNode.getNodeName());
- // 得到weather
- // Node nodeWeather = weatherNode.getChildNodes();
- // 得到weather下节点数组
- NodeList nodeForecastWeathers = weatherNode.getChildNodes();
- // 遍历weather下的节点
- for(int i=0; i<nodeForecastWeathers.getLength(); i++)
- {
- Node nodeForecastWeather = nodeForecastWeathers.item(i);
- // 筛选节点 找名称为 forecast_conditions 节点
- if(nodeForecastWeather.getNodeType()==Node.ELEMENT_NODE
- &&nodeForecastWeather.getNodeName().equals("forecast_conditions"))
- {
- // 建立forecast_conditions下节点数组
- NodeList nodeListForecastConditions = nodeForecastWeather.getChildNodes();
- for(int j=0; j<nodeListForecastConditions.getLength(); j++)
- {
- //day_of_week low high condition
- Node data = nodeListForecastConditions.item(j);
- if(data.getNodeName().equals("day_of_week"))
- {
- wd.setDayOfWeek(data.getAttributes().getNamedItem("data").getNodeValue());
- }
- else if(data.getNodeName().equals("low"))
- {
- wd.setLow(data.getAttributes().item(0).getNodeValue());
- }
- else if(data.getNodeName().equals("high"))
- {
- wd.setHigh(data.getAttributes().item(0).getNodeValue());
- }
- else if(data.getNodeName().equals("condition"))
- {
- wd.setConditionData(data.getAttributes().item(0).getNodeValue());
- }
- }
- System.out.println(wd.printWeatheaInfo());
- }
- }
- }
- public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException
- {
- Weather weather = new Weather();
- weather.resolutionXML("http://www.google.com/ig/api?hl=zh_CN&weather=wuhan");
- }
- class WeatherData
- {
- String dayOfWeek;
- String low;
- String high;
- String conditionData;
- public void setDayOfWeek(String dayOfWeek)
- {
- this.dayOfWeek = dayOfWeek;
- }
- public void setLow(String low)
- {
- this.low = low;
- }
- public void setHigh(String high)
- {
- this.high = high;
- }
- public void setConditionData(String conditionData)
- {
- this.conditionData = conditionData;
- }
- public String printWeatheaInfo()
- {
- return dayOfWeek+"\n"+"温度: "+low+"~~"+high+" \n天气情况: "+conditionData;
- }
- }
- }
这个是执行结果,完全解析正确
相关推荐
Vue和React是数据驱动视图,如何有效控制DOM操作?能不能把计算,更多的转移为js计算?因为js执行速度很快。patch函数-->patch,对比tag,对比tag与key,对比children