JDom解析xml文件
程序员文章站
2022-05-28 11:44:14
...
情景
解析xml配置文件,将数据库列名和Bean的属性映射。
jar包下载地址
DOM:jdk自带
标准的xml解析方式,树形加载整个xml,不适合大文件。
SAX:http://sourceforge.net/projects/sax/
事件模型xml解析方式,不需要完全加载xml,相较性能更好。
JDOM:http://jdom.org/downloads/index.html
针对java的Dom解析。
DOM4J:http://sourceforge.net/projects/dom4j/
针对java功能强大的xml解析,能够处理大文件,性能也很好,但是很复杂。
xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<mapper name="vo.UserInfo">
<property dbName="USER_NAME|user_name" fName="userName"/>
<property dbName="ARCHIVE_ID|archive_id" fName="archiveID"/>
<property dbName="USER_MOBILE|user_mobile" fName="userMobile"/>
<property dbName="DEPT_NAME|dept_name" fName="userDept"/>
</mapper>
解析xml
注意: 开始解析之前一定要记着导jar包。
/**
* JDom解析xml文件工具类
*
* @author fengzhen
* @version v1.0, 2017/9/5 11:07
*/
public class JDomUtils {
/**
* 解析mapper类型xml文件
*
* @author fengzhen
* @version v1.0, 2017/9/5 11:10
*/
public static List<Map<String, String[]>> parseMapperAll(String fileName) throws JDOMException, IOException {
ArrayList<Map<String, String[]>> result = new ArrayList<>();
// 创建解析器build对象
SAXBuilder saxBuilder = new SAXBuilder();
// 读取xml对象
Document userMapper = saxBuilder.build(new File("src/mapper/" + fileName));
// 获取根节点
Element rootElement = userMapper.getRootElement();
// 获取根节点下所有自己节点
List<Element> propertys = rootElement.getChildren("property");
for (Element property :
propertys) {
HashMap<String, String[]> element = new HashMap<>();
// 解析属性名
String fName = property.getAttributeValue("fName");
element.put("fName", new String[]{fName});
// 解析数据库名 可能存在别名
String dbName = property.getAttributeValue("dbName");
element.put("dbName", dbName.split("\\|"));
result.add(element);
}
return result;
}
/**
* 解析mapper类型xml文件
*
* @author fengzhen
* @version v1.0, 2017/9/5 11:10
*/
public static String parseMapperModel(String fileName) throws JDOMException, IOException {
// 创建解析器build对象
SAXBuilder saxBuilder = new SAXBuilder();
// 读取xml对象
Document userMapper = saxBuilder.build(new File("src/mapper/" + fileName));
// 获取根节点
Element rootElement = userMapper.getRootElement();
return rootElement.getAttributeValue("name");
}
结果展示
调用解析方法解析文件
try {
List<Map<String, String[]>> maps = JDomUtils.parseMapperAll("UserMapper.xml");
for (Map<String, String[]> map :
maps) {
System.out.println("dnName:"+map.get("dbName")[0]+" fName:"+map.get("fName")[0]);
}
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
结果:为了简单,这里只取第一个值,别名没有进行展示
dnName:USER_NAME fName:userName
dnName:ARCHIVE_ID fName:archiveID
dnName:USER_MOBILE fName:userMobile
dnName:DEPT_NAME fName:userDept
上一篇: JAVA学习笔记——GUI图形用户界面