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结构改变,这种方式修改起来也方便。
仅限自己记录。