xml--dom4j SAXReader解析

本文介绍如何使用Dom4j库进行XML文件的解析、查找元素、获取属性值、迭代所有内容、修改元素内容、删除元素、以及添加新元素的操作。包括查找特定节点的文本、属性值,遍历所有子节点,修改节点内容,删除节点,以及在特定位置添加新节点等。通过示例代码展示了具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
package cn.itcast.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.util.List;

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

public class Demo1 {


  //查找xml文档内容:得到第一个书名节点的值
  @Test
  public void test1() throws DocumentException{
   
    //1.得到解析器
    SAXReader reader = new SAXReader();
   
    //2.解析xml文档
    Document document = reader.read(new File("src/book.xml"));
   
   
   
    String content = document.getRootElement().element("书").element("书名").getText();
    System.out.println(content);
  }
 
  //查找xml文档内容:得到第二个书名节点的值
  @Test
  public void test2() throws DocumentException{
   
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element book = (Element) document.getRootElement().elements("书").get(1);
    String content = book.element("书名").getText();
    System.out.println(content);
  }
 
 
  //查找xml文档内容:得到书名节点的属性
  @Test
  public void test3() throws DocumentException{
   
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   
    String attrValue = root.element("书").element("书名").attributeValue("name");
    System.out.println(attrValue);
  }
 
  //迭代出文档所有内容
  @Test
  public void test4() throws Exception{
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   
    list(root);
  }
 
  public void list(Element e){
    System.out.println(e.getName());
    List<Element> list = e.elements();
    for(Element child : list){
      list(child);
    }
  }
 
  //改:将第一本书的价格改为39: <售价>28.00元</售价>
  @Test
  public void test5() throws Exception{
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   
    root.element("书").element("售价").setText("39.00元");
   
    //把更新后的内存数据写回到xml文档中 fileWriter
   
   
   
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("gb2312");
   
    XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"),format);
    writer.write(document);
    writer.close();
  }
 
  //删
  @Test
  public void test6() throws Exception{
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   
    Element price = root.element("书").element("售价");
    price.getParent().remove(price);
   
    //把更新后的内存数据写回到xml文档中 fileWriter
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"));
    writer.write(document);
    writer.close();
  }
 
 
  //增加:为第一本书添加一个售价结点
  @Test
  public void test7() throws Exception{
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   
   
    Element price = DocumentHelper.createElement_x_x("售价");
    price.setText("89元");
    root.element("书").add(price);
   
   
    //把更新后的内存数据写回到xml文档中 fileWriter
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"),format);
    writer.write(document);
    writer.close();
  }
 
  //增加2:为第一本书添加一个售价结点
  @Test
  public void test8() throws Exception{
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   
   
    //把更新后的内存数据写回到xml文档中 fileWriter
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"),format);
    writer.write(document);
    writer.close();
  }
 
  //增加3:在指定位置添加一个售价结点(特殊,小心)
  @Test
  public void test9() throws Exception{
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("src/book.xml"));
    Element root = document.getRootElement(); //书架
   

    List list = root.element("书").elements();
    //创建要插入的节点
    Element price = DocumentHelper.createElement_x_x("售价");
    price.setText("89元");
    list.add(2, price);
   
   
    //把更新后的内存数据写回到xml文档中 fileWriter
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"),format);
    writer.write(document);
    writer.close();
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值