XML解析,解析文件存入hash map集合中,map的key为省份,类型为String,value位城市,类型为list《String》
时间: 2024-02-06 11:10:02 浏览: 83
好的,可以使用Java中的DOM解析器来解析XML文件。DOM解析器会将XML文件解析成一个树状结构,我们可以遍历这个树状结构,将解析到的数据存入HashMap中。
以下是一个简单的示例代码:
```java
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
public class XmlParser {
public static void main(String[] args) {
try {
File inputFile = new File("data.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
NodeList nList = doc.getElementsByTagName("province");
for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String province = eElement.getAttribute("name");
NodeList cityList = eElement.getElementsByTagName("city");
List<String> cityNames = new ArrayList<String>();
for (int j = 0; j < cityList.getLength(); j++) {
Node cityNode = cityList.item(j);
if (cityNode.getNodeType() == Node.ELEMENT_NODE) {
Element cityElement = (Element) cityNode;
cityNames.add(cityElement.getAttribute("name"));
}
}
map.put(province, cityNames);
}
}
// 输出HashMap中的数据
for (String province : map.keySet()) {
System.out.println("Province: " + province);
List<String> cities = map.get(province);
for (String city : cities) {
System.out.println("\tCity: " + city);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
上述代码中,我们首先创建了一个HashMap,用于存储解析后的数据。然后使用DOM解析器解析XML文件,遍历每个省份节点,并将省份名称作为HashMap的key,城市列表作为value存入HashMap中。在遍历每个省份节点时,我们同样遍历该省份下的所有城市节点,并将城市名称添加到城市列表中。最后,我们遍历HashMap中的数据并输出。
需要注意的是,上述代码中的XML文件结构应该类似于以下结构:
```xml
<provinces>
<province name="北京">
<city name="北京市"/>
</province>
<province name="上海">
<city name="上海市"/>
</province>
<province name="广东">
<city name="广州市"/>
<city name="深圳市"/>
<city name="珠海市"/>
</province>
</provinces>
```
其中,每个省份节点包含一个name属性,表示省份名称;每个城市节点包含一个name属性,表示城市名称。
阅读全文