java使用DOM4j解析XML文件

这篇具有很好参考价值的文章主要介绍了java使用DOM4j解析XML文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、简介

dom4j是java中的XML API,性能优异、功能强大、开放源代码。

也是所有解析XML文件方法中最常用的!

2、代码实操

准备需要j的ar包添加到lib目录下,dom4j-2.1.1.jar(网上随便找一个)

新建项目,在项目下创建info.xml

<?xml version="1.0" encoding="UTF-8"?>
<phone>
  <brand name="华为">
    <type name="mate30"/>
  </brand>
  <brand name="苹果"> 
    <type name="iphone12"/> 
  </brand>  
  <brand name="小米"> 
    <type name="红米"/>  
    <type name="小米8"/> 
  </brand>
</phone>

 创建类Test,再使用DOM4j实现对XML文件增删改查

1、获取Document对象

Document document=null;
private void getDocument() {
        //创建解析器
        SAXReader saxReader = new SAXReader();
        //解析指定的XML文件
        try {
            document = saxReader.read(new File("info.xml"));
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        }
    }

2、展示所有的手机信息(这里也可以按照上篇DOM方式解析一样使用递归)

   private void showInfo() {
        //获取根节点
        Element root = document.getRootElement();

        //Iterator<Element> iterator = root.elementIterator();
        //while (iterator.hasNext()){
        //    Element next = iterator.next();
        //}

        /*这里是将遍历简写到for循环中,上面的while循环是我们通用的迭代器遍历 */
        for(Iterator<Element> brandIte=root.elementIterator();brandIte.hasNext();){
            //获取根节点下的所有子节点
            Element brand = brandIte.next();
            //输出元素节点名称和指定属性值
            System.out.println(brand.getName()+"\t"+brand.attributeValue("name"));
            //同样的方法,获取子节点
            for(Iterator<Element> typeIte = brand.elementIterator();typeIte.hasNext();){
                //接收每个子节点
                Element type = typeIte.next();
                //输出元素节点名称和指定属性值
                System.out.println(type.getName()+"\t"+type.attributeValue("name"));
            }
        }
    }

3、 添加手机信息

private void addInfo() {
        //获取根节点
        Element root = document.getRootElement();
        //根节点中插入子节点
        Element brand = root.addElement("brand");
        //为子节点赋予属性值
        brand.addAttribute("name","魅族");
        //为brand节点插入子节点1
        Element type1 = brand.addElement("type");
        //为子节点赋予属性值
        type1.addAttribute("name","哎呦");
        //为brand节点插入子节点2
        Element type2 = brand.addElement("type");
        //为子节点赋予属性值
        type2.addAttribute("name","卧槽");
        //保存
        save();
    }

DOM4j跟DOM一样都要通过某种方式保存实现真正的数据交互

DOM4j是通过输出流的方式进行保存

private void save() {
        //设置格式
        OutputFormat format =OutputFormat.createPrettyPrint();
        try {
            //指定输出文件
            XMLWriter writer = new XMLWriter(new FileWriter("info.xml"),format);
            //输出当前document对象
            writer.write(document);
            //关流
            writer.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

4、为每个手机品牌添加id编号

private void updateInfo() {
        //获取根节点
        Element root = document.getRootElement();
        //声明起始值用于输出编号
        int i=0;
        //遍历出子节点
        for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
            //接收每个子节点
            Element brand = brandIte.next();
            //为该子节点增加属性
            brand.addAttribute("id",i+"");
            i++;
        }
        //保存
        save();
    }

5、删除魅族手机文章来源地址https://www.toymoban.com/news/detail-491412.html

private void deleteInfo() {
        //获取根节点
        Element root = document.getRootElement();
        //遍历出子节点
        for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
            //接收子节点
            Element brand = brandIte.next();
            //判断该节点属性name是否为魅族
            if(brand.attributeValue("name").equals("魅族")){
                //通过父节点删除该节点
                brand.getParent().remove(brand);
            }
        }
        //保存
        save();
    }

3、我的完整代码展示

package XML.DOM4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        test.getDocument();
        test.showInfo();
        test.addInfo();
        test.updateInfo();
        test.deleteInfo();
    }

    /**
     * 删除手机信息
     */
    private void deleteInfo() {
        Element root = document.getRootElement();
        for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
            Element brand = brandIte.next();
            if(brand.attributeValue("name").equals("魅族")){
                brand.getParent().remove(brand);
            }
        }
        save();
    }

    /**
     * 修改手机信息
     */
    private void updateInfo() {
        Element root = document.getRootElement();
        int i=0;
        for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
            Element brand = brandIte.next();
            brand.addAttribute("id",i+"");
            i++;
        }
        save();
    }

    /**
     * 添加手机信息
     */
    private void addInfo() {
        Element root = document.getRootElement();
        Element brand = root.addElement("brand");
        brand.addAttribute("name","魅族");
        Element type1 = brand.addElement("type");
        type1.addAttribute("name","哎呦");
        Element type2 = brand.addElement("type");
        type2.addAttribute("name","卧槽");
        save();
    }

    /**
     * 保存
     */
    private void save() {
        //设置格式
        OutputFormat format =OutputFormat.createPrettyPrint();
        try {
            XMLWriter writer = new XMLWriter(new FileWriter("info.xml"),format);
            writer.write(document);
            writer.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    Document document=null;

    /**
     * 显示手机信息
     */
    private void showInfo() {
        Element root = document.getRootElement();
        for(Iterator<Element> brandIte=root.elementIterator();brandIte.hasNext();){
            Element brand = brandIte.next();
            System.out.println(brand.getName()+"\t"+brand.attributeValue("name"));
            for(Iterator<Element> typeIte = brand.elementIterator();typeIte.hasNext();){
                Element type = typeIte.next();
                System.out.println(type.getName()+"\t"+type.attributeValue("name"));
            }
        }
    }
    private void getDocument() {
        SAXReader saxReader = new SAXReader();
        try {
            document = saxReader.read(new File("info.xml"));
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        }
    }

}

到了这里,关于java使用DOM4j解析XML文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Dom4j的下载安装(保姆级教程)

    1.下载 方法① 官网下载:dom4j(打开速度可能比较慢) 方法②:在网上搜索dom4j安装包 2.安装 (1)下载完成后,创建一个文件存放好dom4j压缩包( 注意!!!不要解压!!!乖,咱听话!!! ) (2)打开你的Java编程软件Eclipse或者IDEA Eclipse 版: ① IDEA 版: ①“右击项目名

    2024年02月13日
    浏览(43)
  • 【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。

    JAVA8 可以使用标准的 DOM 方式的 API 来编写代码解析 XML 文件,无需引入第三方依赖。下面是两个测试用的 XML 文件: test.xml test2.xml 负责接收所有信息的 AllDataDTO.java 负责接收用户信息的 AllDataUserDTO.java 处理 XML 文件的工具类,XmlUtils.java 用于测试效果的类 Main.java 输出结果:

    2024年01月22日
    浏览(32)
  • java 使用documents4j将XML转为pdf文件的方式

    通过spire.doc.free将word转换成PDF时存在缺陷:只能获取前3页。获取全文另外需支付费用。 使用documents4j,documents4j会保留原word文件中更多的样式,如修订模式下的差异化字体颜色、文档右侧修订记录等。 1.引入Pom 2.  xml2pdf方法如下,xmlpath是xml文件地址,pdfPath是生成的pdf地址

    2024年02月21日
    浏览(39)
  • Java中Excel文件解析(POI简介及基本使用)

    在Java技术生态圈中,可以进行Excel文件处理的主流技术包括: Apache POI 、 JXL 、 Alibaba EasyExcel 等。 其中各个技术都有最适合的场景 Apache POI 基于 DOM 方式进行解析,将文件直接加载内存,所以速度较快,适合 Excel 文件数据量不大的应用场景。 JXL 只支持Excel 2003以下版本,所以

    2024年02月08日
    浏览(35)
  • 深入学习 XML 解析器及 DOM 操作技术

    所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象 以下示例将一个文本字符串解析为XML DOM对象,并使用JavaScript从中提取信息: 示例 示例解释

    2024年03月17日
    浏览(33)
  • java解析xml文件

    MyContentHandler类继承自DefaultHandler,是一个自定义的内容处理器。在该类中重写了startElement()、endElement()和characters()方法,以处理XML解析的不同事件。

    2024年02月13日
    浏览(34)
  • Java中解析XML文件

            XML(EXtensible Markup Language),可扩展标记语言,相比于HTML可以自定义标签,不遵循W3C标准         XML特点:跨平台、跨语言、跨系统。XML与操作系统、编程语言的开发平台无关。         XML作用:①数据交互②使用XML文件配置应用程序和网站 1.文档声明 包括文档

    2024年02月09日
    浏览(29)
  • 使用TinyXML-2解析XML文件

    当我们想要在不同的程序、系统或平台之间共享信息时,就需要一种统一的方式来组织和表示数据。XML(EXtensible Markup Language,即可扩展标记语言)是一种用于描述数据的标记语言,它让数据以一种结构化的方式呈现,使得计算机程序能够轻松理解和处理这些数据。 XML有以下

    2024年02月20日
    浏览(28)
  • 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    这是我在学习 JSTL 时产生的错误。 没有使用 Maven 。 是手动引入 JSTL 包(jstl.jar 和 standard.jar)。在请求转发到 .jsp 界面,再没有使用 JSTL 语句前是通的,使用 JSTL 后就会报错。 org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.

    2023年04月08日
    浏览(35)
  • 【已解决】无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    解决时间:2023/3/31,我使用的tomcat是8.5版本的,在整合SSM项目时在jsp中使用JSTL的核心标签库 - core,也就是使用 c:forEach 标签遍历出现了这个问题: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri 不知道该怎么说明这个bug,因为我已经在网上试过很多方法了。 比如

    2024年02月07日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包