第一次写博客,不知道该怎么写,只有想到怎么写就怎么写了
java中如何把xml文件转换为map文件。本文章主要是针对不带属性的转化,并且必须要有根元素,不然会报错。
需要额外导入的jar包:jdom.jar
package com.jsptest;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class XmlToMap {
public static void main(String[] args) throws JDOMException, IOException {
//文件的读取
File file = new File("C:"
+File.separator+"Users"
+File.separator+"Administrator.USER-20170729ZL"
+File.separator +"Desktop"
+File.separator+"file.xml");
//File file2 = new File("C:\\Users\\Administrator.USER-20170729ZL\\Desktop\\file.xml");
//创建解析器对象
SAXBuilder builder = new SAXBuilder();
/*
* 如果是字符串对象,就用StringReader读取
* Reader reader = new StringReader(sb.toString());
*/
// FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。
Reader reader = new FileReader(file);
//创建Document对象
Document doc = builder.build(reader);
//创建map对象,用于接收xml文件的内容
Map<String,Object> map = new HashMap<String,Object>();
//创建element对象,读取根节点
Element root = doc.getRootElement();
//读取子节点
List booklist = root.getChildren();
//把读取到的内容添加到map中去
map.put(root.getName(), XmlToMap.getChildrenText(booklist));
//输出map
System.out.println(map);
}
//操作子节点
public static Map<String,Object> getChildrenText(List children) {
Map<String,Object> map = new HashMap<String,Object>();
if(!children.isEmpty()) {
Iterator it = children.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String name = e.getName();
Object value = "";
List list = e.getChildren();
if(!list.isEmpty()) {
//如果还有子节点,递归
value = xmlToMap.getChildrenText(list);
}else {
value = e.getValue();
}
map.put(name, value);
}
}
return map;
}
}}