java 解析xml文件

1.**首先先将xml文件放入java工程中。
我放入的是resources文件夹中。
2.xml结构:本次解析的是全国省市xml文件,这种不会变的数据一般不用储存数据库中。

	<data>
		<JzProvinceList>
			<jzProvince>
			<!--省级-->
				<text>北京市</text>
				<code>110000</code>
				<jzCityList>
					<jzCity>
					<!--市级-->
						<text>北京市</text>
						<code>110000</code>
						<jzCountyList>
						<!--区县级-->
							<jzCounty><text>东城区</text><code>110101</code></jzCounty>
							<jzCounty><text>西城区</text><code>110102</code></jzCounty>
							<jzCounty><text>朝阳区</text><code>110105</code></jzCounty>
							<jzCounty><text>丰台区</text><code>110106</code></jzCounty>
							<jzCounty><text>石景山区</text><code>110107</code></jzCounty>
							<jzCounty><text>海淀区</text><code>110108</code></jzCounty>
							<jzCounty><text>门头沟区</text><code>110109</code></jzCounty>
							<jzCounty><text>房山区</text><code>110111</code></jzCounty>
							<jzCounty><text>通州区</text><code>110112</code></jzCounty>
							<jzCounty><text>顺义区</text><code>110113</code></jzCounty>
							<jzCounty><text>昌平区</text><code>110114</code></jzCounty>
							<jzCounty><text>大兴区</text><code>110115</code></jzCounty>
							<jzCounty><text>怀柔区</text><code>110116</code></jzCounty>
							<jzCounty><text>平谷区</text><code>110117</code></jzCounty>
							<jzCounty><text>密云区</text><code>110118</code></jzCounty>
							<jzCounty><text>延庆区</text><code>110119</code></jzCounty>
						</jzCountyList>
					</jzCity>
				</jzCityList>
			</jzProvince>
		</JzProvinceList>
	</data>

我这里只解析到省跟市,区县没有用到
java代码

public List<ProvinceInfo> getProvinceInfo(String code) throws DocumentException {
        SAXReader reader = new SAXReader();
        InputStream in = this.getClass().getResourceAsStream("/CityData.xml");
        Document doc = reader.read(in);
        Element element = doc.getRootElement();//所有xml标签对象
        Element element1;
        Element element2;//所有省级标签对象
        Element element3;
        Element element4;//城市标签对象
        List<ProvinceInfo> provinceInfoList = new ArrayList<>();//省级数据集合
        Iterator jzProvince = element.elementIterator("JzProvinceList");//获取父级标签集合
        while (jzProvince.hasNext()) {
            element1 = (Element) jzProvince.next();
            //获取所有省级标签集合 遍历
            Iterator jzProvince1 = element1.elementIterator("jzProvince");
            while (jzProvince1.hasNext()) {
                element2 = (Element) jzProvince1.next();
                ProvinceInfo provinceInfo = new ProvinceInfo();
                String codeT = element2.elementText("code");
                //获取该省的城市
                if (StringUtils.isNotBlank(code)) {
                    if (codeT.equals(code)) {
                        element3 = element2.element("jzCityList");//城市父级标签
                        Iterator jzCity = element3.elementIterator("jzCity");//城市标签集合
                        while (jzCity.hasNext()) {
                            element4 = (Element) jzCity.next();
                            provinceInfo = new ProvinceInfo();
                            provinceInfo.setText(element4.elementText("text"));
                            provinceInfo.setCode(element4.elementText("code"));
                            provinceInfoList.add(provinceInfo);
                        }
                    }
                } else {
                    provinceInfo.setText(element2.elementText("text"));
                    provinceInfo.setCode(codeT);
                    provinceInfoList.add(provinceInfo);
                }
            }
        }
        return provinceInfoList;
    }

我使用的Document 方法,这种方式看似里面的结构复杂,但是只要理清层级关系,还是比较好理解的。而且解释xml结构改变,这种方式修改起来也方便。
仅限自己记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值