Dom4j解析xml文件

1.xml解析技术原理

1)不管是html文件还是xml文件都是标记型文档,都可以使用w3c组织定的dom技术来解析

2)document对象表示的是整个文档(可以是html文档,也可以是xml文档)

XML DOM教程

2.DOM4j介绍

1)Dom4j是一个简单、灵活的开放源代码的库(用于解析/处理xml文件)。Dom4j是由早期开发JDOM的人

分离出来而后独立开发的

2)与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对复杂一些,但它提供了比JDOM

更好的灵活性

3)Dom4j是一个非常优秀的java XML API,具有性能优异、功能强大和极易使用的特点,现在很多

软件都才有Dom4j

4)使用Dom4j开发,需下载dom4j相应的jar文件

3.Dom4j中获得·Document对象的三种方式

1)开发dom4j要导入的包

2)读取XML文件,获得document对象

SAXReader reader=new SAXReader();//创建一个解析器
​
Document document=reader.read(new File("src/input.xml"));//XML Domcument
 

3)解析XML形式的文本,得到document对象

String text="<members></members>";
​
Document document=DocumentG
​
Helper.parseText(text);

4)主动创建document对象

Document document=DocumentHelper.createDocument();//创建根节点
​
Element root=document.addElement("members");

4应用实例(主要是增删改查,重点遍历和指定查询)

<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student id="01">
        <name>小龙女</name>
        <gender>女</gender>
        <age>16</age>
        <resume>古墓派掌门人</resume>
    </student>
    <student id="02">
        <name>欧阳锋</name>
        <gender>男</gender>
        <age>18</age>
        <resume>白驼山,蛤蟆神功</resume>
    </student>
</students>
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
​
import java.io.File;
import java.util.List;
​
public class Dom4j_ {
    /**
     * 演示如何加载xml文件
     */
    @Test
    public void loadXML() throws DocumentException {
        //得到一个解析器
        SAXReader reader = new SAXReader();
        //debug看看document对象的属性
        //
        Document document = reader.read(new File("src/students.xml"));
        System.out.println(document);
    }
    /**
     * 演示如何遍历xml文件
     */
    @Test
    public void listStus() throws DocumentException {
        SAXReader reader = new SAXReader();
        //debug看看document对象的属性
        //
        Document document = reader.read(new File("src/students.xml"));
​
        //得到rootElement
        Element element=document.getRootElement();
        //得到rootElement的student的Elements
        List<Element> students = element.elements();
//        System.out.println(students.size());
        for (Element student : students) {//student就是Student元素
            Element name = student.element("name");
            Element gender = student.element("gender");
            Element age = student.element("age");
            Element resume = student.element("resume");
            System.out.println("学生信息为:"+name.getText()+","+gender.getText()+","+
                    age.getText()+","+resume.getText());
        }
​
    }
​
    /**
     * 指定读取某一个学生信息
     */
    @Test
    public void readOne() throws DocumentException {
        SAXReader reader=new SAXReader();
​
        Document document=reader.read(new File("src/students.xml"));
​
        Element element=document.getRootElement();
​
        Element student = (Element) element.elements("student").get(0);
​
​
            Element name = student.element("name");
            Element gender = student.element("gender");
            Element age = student.element("age");
            Element resume = student.element("resume");
            System.out.println("学生信息为:"+name.getText()+","+gender.getText()+","+
                    age.getText()+","+resume.getText());
​
            //获取属性
             System.out.println(student.attributeValue("id"));
​
    }
}
  

增删改:

nt document=reader.read(new File("src/students.xml"));
        //找到该元素第一个学生
        Element student = (Element) document.getRootElement().elements("student").get(2);
        //删除元素
        student.getParent().remove(student);
        //删除某个元素的属性
//        student.remove(student.attribute("id"));
        //更新xml
        OutputFormat output=OutputFormat.createPrettyPrint();
        output.setEncoding("UTF-8");
        //把xml文件更新
        XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/students.xml")),
                output);
        writer.write(document);
        writer.close();
        System.out.println("删除成功");
​
    }
​
    /**
     * 修改:所有学生年龄+3
     */
    @Test
    public void update() throws DocumentException, IOException {
        //得到解析器
        SAXReader reader=new SAXReader();
        //指定解析哪个xml文件
        Document document=reader.read(new File("src/students.xml"));
​
        List<Element> students =document.getRootElement().elements("student");
​
        //遍历,所有学生age+3
        for (Element student:students){
            //取出年龄,然后+3
            Element age=student.element("age");
            age.setText((Integer.parseInt(age.getText())+3)+" ");
        }
​
        OutputFormat output=OutputFormat.createPrettyPrint();
        output.setEncoding("utf-8");
​
        XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/students.xml")),output);
        writer.write(document);
        writer.close();
        System.out.println("修改成功");
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值