此段代码旨在解析类似google天气格式的xml文档,如需解析其它格式的稍做改动即可。
google天气预报xml格式如下:
<?xml version="1.0"?>
<xml_api_reply version="1">
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1"
row="0" section="0">
<forecast_information>
<city data="" />
<postal_code data="" />
<latitude_e6 data="30670000" />
<longitude_e6 data="104019996" />
<forecast_date data="2011-11-16" />
<current_date_time data="2011-11-16 22:00:00 +0000" />
<unit_system data="SI" />
</forecast_information>
<current_conditions>
<condition data="多云" />
<temp_f data="59" />
<temp_c data="15" />
<humidity data="湿度: 72%" />
<icon data="/ig/images/weather/cn_cloudy.gif" />
<wind_condition data="风向: 东、风速:2 米/秒" />
</current_conditions>
<forecast_conditions>
<day_of_week data="周三" />
<low data="12" />
<high data="17" />
<icon data="/ig/images/weather/mostly_sunny.gif" />
<condition data="以晴为主" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周四" />
<low data="11" />
<high data="18" />
<icon data="/ig/images/weather/mostly_sunny.gif" />
<condition data="以晴为主" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周五" />
<low data="11" />
<high data="19" />
<icon data="/ig/images/weather/mostly_sunny.gif" />
<condition data="以晴为主" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="周六" />
<low data="8" />
<high data="19" />
<icon data="/ig/images/weather/mostly_sunny.gif" />
<condition data="以晴为主" />
</forecast_conditions>
</weather>
</xml_api_reply>
java解析代码如下所示:
package dsh.bikegis.dao.impl;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import dsh.bikegis.dao.XmlDocument;
/**
* 解析Google天氣XML文档
*
* @author NanGuoCan
*
*/
public class WeatherParse implements XmlDocument {
/**
* 解析傳來的google天氣xml
* @param fileName
* 文件全路径名称
*/
@Override
public void parserXml(String fileName) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(fileName);
NodeList xml=document.getChildNodes();
NodeList xml_api_reply = xml.item(0).getChildNodes();
Node weather=xml_api_reply.item(0);
NodeList weathers=weather.getChildNodes();
//解析城市及時間預測信息
Node forecast_information=weathers.item(0);
NodeList informationNode=forecast_information.getChildNodes();
for(int i=0;i<informationNode.getLength();i++){
System.out.println(informationNode.item(i).getNodeName()+":"+informationNode.item(i).getAttributes().item(0));
}
//解析當前天氣
Node current_conditions=weathers.item(1);
NodeList currentInfo=current_conditions.getChildNodes();
for(int i=0;i<currentInfo.getLength();i++){
System.out.println(currentInfo.item(i).getNodeName()+":"+currentInfo.item(i).getAttributes().item(0));
}
//解析本周未來幾天天氣
for (int i = 2; i < weathers.getLength(); i++) {
Node forecast_conditions = weathers.item(i);
NodeList forecast_conditionsInfo = forecast_conditions.getChildNodes();
for (int j = 0; j < forecast_conditionsInfo.getLength(); j++) {
System.out.println(forecast_conditionsInfo.item(j).getNodeName()
+ ":" + forecast_conditionsInfo.item(j).getAttributes().item(0));
}
}
System.out.println("解析完毕");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
} catch (SAXException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
分享到:
相关推荐
XML-Pull解析是一种轻量级的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要一次性加载整个XML文档到内存中。XML-Pull解析器在读取XML文档时,只处理当前的事件,这样可以节省...
Java中的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可以实现DOM解析。以下是一个简单的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;...
Python中可以使用`xml.etree.ElementTree`库进行解析,Java中可使用DOM或SAX解析器。 3. **XML到PB转换**:这个过程需要先定义PB消息类型,匹配XML数据的结构。然后编写解析代码,将XML元素映射到对应的PB消息字段...
但是,由于JSTL的XML标签库并不支持所有XML操作,对于更复杂的解析需求,可能需要借助Java代码,比如创建一个DOM解析器实例,或者使用SAX解析器逐事件处理XML流。 在实际应用中,我们还需要关注**安全性**和**错误...
4. **处理注释和格式化**:为了提高代码可读性,可以添加适当的Javadoc注释,并使用代码格式化工具如Google的`JavaFormat`来保持代码风格一致。 5. **整合到项目**:生成的Java类通常会加入到项目的源代码目录,而...
其中,SAX解析器是一种事件驱动的解析器,它读取XML文档并触发一系列的事件,例如开始元素、结束元素、字符数据等,这使得SAX解析器在处理大型XML文档时比DOM更节省内存。 以下是使用SAX解析XML天气数据的基本步骤...
这种方式相较于DOM解析器,内存占用较低,适合处理大体积的XML文档。 要开始解析Google天气预报的XML,我们需要创建一个SAXContentHandler类,该类继承自DefaultHandler。在这个类中,我们将定义处理开始元素、结束...
Dom方式创建与解析XML文档是一种使用编程语言,如Java,在Android平台实现的方式。这种方式利用了DOM(文档对象模型)的API,其中JAXP(Java API for XML Processing)提供的DocumentBuilder类是用来创建和解析XML...
2. **XML处理**:Google天气API返回的数据格式可能是XML,Java中处理XML数据可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等类来解析。首先,创建一个解析器,然后解析XML字符串,...
- **DOM解析器**:Android提供了DocumentBuilderFactory类,用于创建DOM解析器。通过这个解析器,我们可以获取整个XML文档的树形结构,并通过Node接口操作XML元素。 - **SAX解析器**:适用于处理大型XML文件,因为...
为了生成XML文件,我们使用DOM4J库,它是一个强大的Java XML API,可以方便地创建、解析和操作XML文档。首先,需要添加DOM4J的依赖,如`dom4j-1.6.1.jar`。然后,创建Document对象,定义Element结构,并填充从数据库...
1. **DOM解析器**:DOM解析器将整个XML文档加载到内存中的一个树形结构,允许开发者通过节点遍历和操作XML。例如,可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来创建和操作XML...
例如,服务器端的Struts通过拦截器处理用户请求,使用DOM4J或XML解析配置文件,执行相应的业务逻辑;然后,可以通过Gson将处理结果转换为JSON格式,通过HTTP响应发送给客户端;客户端接收到JSON数据后,可以使用...
由于Google返回的天气信息是以XML格式组织的,因此我们需要使用DOM解析器对其进行解析。这里使用了`DocumentBuilderFactory`和`DocumentBuilder`来构建DOM树: ```java DocumentBuilderFactory factory = ...
- DOM解析:DOM(Document Object Model)是一种将XML文档映射为树形结构的方法,通过它可以访问和修改XML文档的任何部分。Java中的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类可以用来...
这里可能会使用到如JAXB(Java Architecture for XML Binding)这样的库,它能将XML文档映射为Java对象,便于操作。具体步骤可能包括以下几步: 1. 加载KML文件:使用Java的FileInputStream类打开文件,然后通过...
根据提供的文件信息,本文将详细解释如何通过Java编程语言来获取Google提供的天气预报...综上所述,通过Java程序可以很方便地获取并解析Google提供的天气预报服务中的数据,这对于开发天气应用或进行数据分析非常有用。
1. DOM解析器:DOM(Document Object Model)模型是把XML文档加载到内存中,形成一棵树形结构,可以方便地遍历和修改整个文档。但是,由于DOM将整个XML文件加载到内存,对于大型XML文件可能会消耗大量资源。 2. SAX...
在实际项目中,你可能需要根据需求组合使用这些技术,例如,使用DOM解析XML,结合XPath快速定位数据,然后使用JAXB将结果转换为Java对象。通过熟练掌握这些方法,你可以高效地从XML文件和网页中提取数据,满足各种...