java操作xml之dom4j的增删改查

注意,保存的时候一定要注意编码问题,你的xml文档的编码类型是什么就在format那里设置一样的,否则就会乱码的。

XML测试文档:

<?xml version="1.0" encoding="UTF-8"?>

<商店> 
  <商品> 
    <名称 name="hhhh">手机</名称>  
    <价格>1290</价格>  
    <数量>90部</数量> 
  </商品>  
  <商品> 
    <名称>电脑</名称>  
    <价格>11290</价格>  
    <数量>10台</数量> 
  </商品> 
</商店>

Demo1.java

package com.cx.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
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 {


    //读取指定标签
    @Test
    public void read() throws Exception {

        //得到解析器
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/test.xml"));

        //读取第一个
        String price = document.getRootElement().element("商品").element("价格").getText();

        //读取第二个
        Element goods = (Element)document.getRootElement().elements("商品").get(1);
        String price2 = goods.element("价格").getText();

        //获取属性
        String attr = document.getRootElement().element("商品").element("名称").attributeValue("name");

        System.out.println(price);
        System.out.println(price2);
        System.out.println(attr);
    }


    //增加操作
    @Test
    public void add() throws Exception{

        //获得解析器
        SAXReader reader = new SAXReader();

        //读取xml
        Document document = reader.read(new File("src/test.xml"));

        //处理xml,向第一个商品里添加一个优惠标签,在价格之前
        //创建标签
        Element cut = DocumentHelper.createElement("优惠");
        cut.setText("7折");

        //获得第一个商品下的所有标签
        List list = document.getRootElement().element("商品").elements();
        //此时,list的存放的数据为[名称、价格、数量]
        list.add(1,cut);


        //格式化
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");//设置编码
        //保存
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"),format);
        writer.write(document);
        writer.close();

    }

    //删除操作
    @Test
    public void delete() throws DocumentException, IOException{
        //得到解析器
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/test.xml"));
        //删除属性
        Element goods = document.getRootElement().element("商品").element("名称");
        goods.remove(goods.attribute("name"));
        //删除标签
        Element cut = document.getRootElement().element("商品").element("优惠");
        cut.getParent().remove(cut);
        //格式化
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");//设置编码
        //保存
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"),format);
        writer.write(document);
        writer.close();
    }

    //修改标签
    @Test
    public void update() throws Exception{
        //取得解析器
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/test.xml"));
        List<Element> list = document.getRootElement().elements("商品");
        Element goods = list.get(1);
        goods.element("名称").setText("999");

        //格式化
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");//设置编码
        //保存
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"),format);
        writer.write(document);
        writer.close();
    }

}

猜你喜欢

转载自blog.csdn.net/u010309756/article/details/76636325