运行前先导入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获取城市代码相关推荐

  1. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  2. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    http://blog.csdn.net/smcwwh/article/details/7183869 关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath ...

  3. java解析xml的几种方式

    java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程  第一种:DOM. DOM的全称是Document Object Model,也即文 ...

  4. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  5. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  6. Java解析Xml的三种方式总结

    转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内 ...

  7. JAVA解析xml的五种方式比较

    1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取和操作文档的任意部分,是W3C的官方标准[优点]①允许应用 ...

  8. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...

  9. xml教程之java解析xml文档

    1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...

最新文章

  1. 热加载和热部署,没听过?看看 Tomcat 是怎么实现的
  2. mybatis入门篇(四):mybatis动态SQL
  3. NetBeans 时事通讯(刊号 # 60 - Jun 21, 2009)
  4. 【BZOJ】 3238: [Ahoi2013]差异
  5. 1431. Kids With the Greatest Number of Candies
  6. 接口测试 java_接口测试--Java
  7. leetcode 448. 找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
  8. 宝塔Warning: require(): open_basedir restriction in effect
  9. java拦截器放行_java拦截器放行某些请求
  10. nmake编译dll
  11. 常用数字及模拟视频接口
  12. 读凯文·米特尼克的黑客传奇经历
  13. c语言学籍信息录入,C语言程序报告 学生学籍信息管理系统.doc
  14. 翟菜花:汽车市场首度遇冷,下沉市场与二手车会是破冰利器吗?
  15. html是什么意思?
  16. matlab中stract用法_matlab初学之strcat、num2str
  17. 服务器保存时提示文档未保存,Word文档保存时常遇到的问题及其解决方法
  18. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...
  19. Install OE and BitBake
  20. 不联网计算机软件升级,不能联网的电脑如何升级病毒库

热门文章

  1. python异常处理_汇总三大python异常处理、自定义异常、断言原理与用法分析
  2. visio 2013下载和安装
  3. Python之web开发(六):python使用django框架搭建网站之图表显示操作
  4. 【知识星球】3D网络结构解读系列上新
  5. 【模型解读】历数GAN的5大基本结构
  6. 全球及中国手持式无线电台行业十四五发展动态及前景趋势调研报告2022-2027年
  7. conn.execute参数
  8. mysql导入导出乱码问题
  9. #035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分)
  10. 在浏览器上浏览vue项目,后退按钮是可以正常返回上一页的,但打包成app后,点击手机上的物理返回按钮就直接退出app回到桌面...