基于dom4j读取xml文件
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
下面是使用dom4j框架写了一个小的工具类:
1、maven依赖包
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
2、java工具类
/**
* @author 晓龙
* @version 1.8.271
* @ProtectName Day0421
* @ClassName XmlUtil
* @Description TODO
* @createTime 2021年04月22日 18:41:00
*/
public class XmlUtil {
private static final URL RESOURCE = XmlUtil.class.getClassLoader().getResource("xConfig.xml");
private static final String APP_NAME = "xConfig";
private static Document document = null;
private static Element rootElement = null;
private static Element rootName = null;
private XmlUtil() {
}
/**
* 初始化SAXReader
*
* @param root 查询节点name
* @return true
*/
private static boolean init(String root) {
if (document == null) {
try {
document = new SAXReader().read(RESOURCE);
rootElement = document.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
}
}
if (APP_NAME.equals(rootElement.getName())) {
rootName = rootElement.element(root);
}
return true;
}
/**
* 设置查询节点
*
* @param root
* @return 返回设置结果
*/
public static boolean setRoot(String root) {
if (root == null) {
return false;
}
return init(root);
}
/**
* 获取对应name的元素信息
*
* @param elementName 查询name
* @return 节点信息
*/
public static String getElementByName(String elementName) {
if (elementName == null) {
return null;
}
// 迭代获取节点信息
return getElementText(rootName.elementIterator(), elementName);
}
private static String getElementText(Iterator<Element> it, String elementName) {
// 迭代节点
while (it.hasNext()) {
Element el = it.next();
// 如果节点name和传入的查询节点name相同,返回该节点信息
if (elementName.equals(el.getName())) {
return el.getText();
}
}
return null;
}
}
3、使用案例
3.1、xml文件
-
<?xml version="1.0" encoding="UTF-8"?> <xConfig> <xJdbc> <DriverClassName>com.mysql.cj.jdbc.Driver</DriverClassName> <User>root</User> <Password>19981104</Password> <Url>jdbc:mysql://localhost:3306/cloudMusic?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC</Url> </xJdbc> <xFilter> <Character>UTF-8</Character> </xFilter> </xConfig>
3.2、测试类
-
/** * @author 晓龙 * @version 1.8.271 * @ProtectName Day0421 * @ClassName XmlUtilTest * @Description TODO * @createTime 2021年04月22日 19:01:00 */ public class XmlUtilTest { public static void main(String[] args) { XmlUtil.setRoot("xJdbc"); System.out.println(XmlUtil.getElementByName("DriverClassName")); System.out.println(XmlUtil.getElementByName("User")); System.out.println(XmlUtil.getElementByName("Password")); System.out.println(XmlUtil.getElementByName("Url")); XmlUtil.setRoot("xFilter"); System.out.println(XmlUtil.getElementByName("Character")); } }