java解析XML获取城市代码

运行前先导入dom4j架包,由于我们公司用的代理服务器所以下面我设置了代理ip,不需要的可直接忽略

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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;
    }
}

 

 

运行部分结果如下图:

 

posted @   岁月淡忘了谁  阅读(753)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示