【JAVA】基于dom4j读取xml文件

基于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&amp;characterEncoding=utf8&amp;useSSL=true&amp;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"));
        }
    }
    

3.3、结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题我可以回答。以下是Java使用dom4j读取XML文件的基本步骤: 1. 导入dom4j的jar 你可以通过maven或手动下载jar的方式导入dom4j的jar。 2. 创建SAXReader对象 SAXReader是dom4j的核心类,用于读取XML文件并将其转换为Document对象。 3. 加载XML文件 使用SAXReader对象的read方法加载XML文件,并将其转换为Document对象。 4. 获取根节点 通过Document对象的getRootElement方法获取XML文件的根节点。 5. 遍历节点 可以使用递归的方式遍历XML文件的节点,获取节点的名称、属性、子节点等信息。 下面是一个简单的示例代码: ```java import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; public class Dom4jDemo { public static void main(String[] args) { try { // 创建SAXReader对象 SAXReader reader = new SAXReader(); // 加载XML文件 Document document = reader.read(new File("example.xml")); // 获取根节点 Element root = document.getRootElement(); // 遍历节点 print(root); } catch (Exception e) { e.printStackTrace(); } } public static void print(Element element) { // 输出节点名称 System.out.println(element.getName()); // 输出节点属性 List<Attribute> attributes = element.attributes(); for (Attribute attribute : attributes) { System.out.println(attribute.getName() + ": " + attribute.getValue()); } // 输出子节点 List<Element> elements = element.elements(); for (Element e : elements) { print(e); } } } ``` 以上是一个简单的dom4j读取XML文件的示例代码,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值