java解析XML获取城市代码
运行前先导入dom4j架包,由于我们公司用的代理服务器所以下面我设置了代理ip,不需要的可直接忽略
package com.chengshidaima.tools; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; public class CityCode
{ // private Logger log = Logger.getLogger(CityCode.class.getName()); public static void main(String[] args) {
try {
CityCode cc = new CityCode();
cc.getCityXml();
//System.out.println(doc.asXML());
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 解析
*
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
private Document getCityXml() throws Exception {
/** 新建一个doc 保存结果 */
Document docResult = DocumentHelper.createDocument();
Element addElementRoot = DocumentHelper.createElement("china"); String sUrlChina = "http://flash.weather.com.cn/wmaps/xml/china.xml";
String sChinaProvXml = getUrlString(sUrlChina);
Document doc = DocumentHelper.parseText(sChinaProvXml); Element rootElt = doc.getRootElement(); // 获取根节点
//log.info("根节点:" + rootElt.getName()); // 拿到根节点的名称
/** 取得所有省份 */
List<Element> listProv = rootElt.elements("city"); // 获取根节点下的子节点
for (int i = 0; i < listProv.size(); i++) {
Element elementProv = listProv.get(i);
/** 省份名字 */
String sProvName = elementProv.attributeValue("pyName");
String sProvNameCN = elementProv.attributeValue("quName");
/** 添加节点 */
Element addElementProv = DocumentHelper.createElement("prov");
addElementProv.addAttribute("pyName", sProvName);
addElementProv.addAttribute("quName", sProvNameCN); try {
//log.info("查询省份:" + sProvNameCN + " 下的城市!");
String sUrlProv = "http://flash.weather.com.cn/wmaps/xml/" + sProvName + ".xml";
String sProvXml = getUrlString(sUrlProv);
Document docProv = DocumentHelper.parseText(sProvXml); Element rootEltProv = docProv.getRootElement(); // 获取省份下的跟节点
List<Element> listCity1 = rootEltProv.elements("city");
for (int j = 0; j < listCity1.size(); j++) {
Element elementCity1 = listCity1.get(j);
String sCityName1 = elementCity1.attributeValue("pyName");
String sCityUrl1 = elementCity1.attributeValue("url");
String sCityNameCN1 = elementCity1.attributeValue("cityname");
System.out.println(sCityNameCN1 + ":" + sCityUrl1); Element addElementMainCity = DocumentHelper.createElement("city");
addElementMainCity.addAttribute("pyName", sCityName1);
addElementMainCity.addAttribute("quName", sCityNameCN1);
addElementMainCity.addAttribute("url", sCityUrl1); try {
String sUrlCity1 = "http://flash.weather.com.cn/wmaps/xml/" + sCityName1 + ".xml";
//log.info("查询主要城市:" + sCityNameCN1 + " 下的城市!");
String sCityXml = getUrlString(sUrlCity1);
Document docCity1 = DocumentHelper.parseText(sCityXml);
Element rootCity1 = docCity1.getRootElement();
List<Element> listCity2 = rootCity1.elements("city"); for (int k = 0; k < listCity2.size(); k++) {
Element elementCity2 = listCity2.get(k);
String sCityName2 = elementCity2.attributeValue("pyName");
String sCityNameCN2 = elementCity2.attributeValue("cityname");
String sCityUrl2 = elementCity2.attributeValue("url");
if (!sCityUrl1.endsWith(sCityUrl2)) {
System.out.println(sCityNameCN2 + ":" + sCityUrl2);
}
Element addElementCity2 = DocumentHelper.createElement("city2");
addElementCity2.addAttribute("pyName", sCityName2);
addElementCity2.addAttribute("quName", sCityNameCN2);
addElementCity2.addAttribute("url", sCityUrl2);
addElementMainCity.add(addElementCity2);
} } catch (Exception e) {
// log.info("查询主要城市:" + sCityNameCN1 + " 下的城市失败!");
}
addElementProv.add(addElementMainCity);
}
} catch (Exception e) {
//log.info("查询省份:" + sProvNameCN + "下的城市失败!");
}
addElementRoot.add(addElementProv);
}
docResult.setRootElement(addElementRoot);
return docResult;
} /**
* 从url获取xml字符串
*
* @param sUrl
* @return
* @throws Exception
*/
private String getUrlString(String sUrl) throws Exception {
String sResult = "";
StringBuffer sbResult = null;
// log.info("开始连接Url:" + sUrl);
sbResult = new StringBuffer();
URL url = new URL(sUrl); // 创建代理服务器
InetSocketAddress addr = new InetSocketAddress("10.128.6.3",808);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理 URLConnection con = url.openConnection(proxy);
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String sLine = null;
while ((sLine = br.readLine()) != null) {
sbResult.append(sLine);
}
sResult = sbResult.toString();
//log.info("获取到信息:" + sbResult.toString().substring(0, 500));
if (sResult.contains("html")) {
String sInt = "null";
Integer.parseInt(sInt);
}
return sResult;
}
}
运行部分结果如下图:
java解析XML获取城市代码的更多相关文章
- Java 解析 XML
Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- 【Java】详解Java解析XML的四种方法
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语 ...
- java解析xml的几种方式
java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...
- Java解析word,获取文档中图片位置
前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...
- Java解析XML之Dom4j
Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6. ...
- JAVA解析XML之SAX方式
JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...
- JAVA解析XML之DOM方式
JAVA解析XML之DOM方式 准备工作 创建DocumentBuilderFactory对象; 创建DocumentBuilder对象; 通过DocumentBuilder对象的parse方法 ...
- java解析xml汇总
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
随机推荐
- Linux启动新进程的几种方法及比较[转]
有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些 ...
- Haskell开始
一.安装 操作系统为centos,为了安装最新的Haskell编译器,不使用命令 yum install ghc 1.安装ghc 使用wget下载ghc,命令如下(注意系统是centos6.7) $ ...
- 10.hibernate缓存机制详细分析(转自xiaoluo501395377)
hibernate缓存机制详细分析 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论 ...
- Lua入门基础
什么是Lua Lua 是一个小巧的脚本语言.是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...
- [SOJ] 1282. Computer games (KMP)
坑爹题 1282. Computer Game Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Brian is an ...
- memcached在项目中的应用
这一篇将以介绍一个memcached在项目中的应用.假设我们有一个web应用,里面有商品信息,文章信息,评论信息,其他信息,我们希望对其做缓存,那么我们在ServiceImpl层就不在调用DAOmpl ...
- Linux目录结构及快捷键
1.树形目录结构 2.最顶层:根目录 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动配置文件和脚本 /home 用户主目录的基点 /lib ...
- NOIP2014-普及组复赛-第三题-螺旋矩阵
题目描述 Description 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵 ...
- erlang套接字
Erlang的套接字可以有三种打开模式:主动(active).单次主动(active once)或被动(passive).这是通过在gen_tcp:connect(Address, Port, Opt ...
- 已知整数m,n,p,q适合(m-p)|(mn+pq)证明:(m-p)|(mq+np)(整除理论1.1.5)
已知整数m,n,p,q适合(m-p)|(mn+pq)证明:(m-p)|(mq+np) 证明: 令(mn+pq)—(mq+np) =mn-np+pq-mq =n(m-p)+q(p-m) =(n-q)(m ...