基于dom4j的java读取xml工具类

Java读取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依赖包


<dependency>
  <groupId>dom4jgroupId>
  <artifactId>dom4jartifactId>
  <version>1.6.1version>
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文件

  • 
    <xConfig>
        <xJdbc>
            <DriverClassName>com.mysql.cj.jdbc.DriverDriverClassName>
            <User>rootUser>
            <Password>19981104Password>
            <Url>jdbc:mysql://localhost:3306/cloudMusic?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTCUrl>
        xJdbc>
        <xFilter>
            <Character>UTF-8Character>
        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"));
        }
    }
    

3.3、结果

在这里插入图片描述

你可能感兴趣的:(java,java)