Android开发:天气预报Dom解析

DOM是用与平台无关和语言无关的方式表示XML文档的官方W3C标准,DOM是以层次结构组织的节点或信息片段的集合。DOM是基于树的,DOM相对SAX来说简单,耗内存...

本次学习目标:了解DOM解析XML ,并用DOM解析谷歌提供的天气 

谷歌提供的天气接口是 ?hl=zh_CN&weather=wuhan   这个接口末尾是wuhan 即 "武汉" 的拼音,依次类推,北京的查询方式是把后面拼音换成beijing就行了,这个接口是查询武汉四天的天气。

根元素(Element)是 xml_api_reply 即树的根 然后往里面扩展。

Android开发:天气预报Dom解析


我要获取节点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;           }       }   }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfxyj.html