首先先介绍一下方法

Document:代表文档对象
Element:节点对象
Attribute:属性
Text:文本
SAXReader:读取器
getRootElement():通过document对象获取该文档的根节点
Element addElement("名称"):添加特定节点 返回值是要被添加的节点
addAttribute("属性名","属性值"):为指定节点添加属性
elementIterator:子元素迭代器,返回Iterator对象
attributeValue("属性名")根据属性名获取属性值
addText:添加文本
remove():移除指定元素 属性....
getText:获取文本

dom4j:在操作其中的一个节点的同时,必须通过上一级节点进行操作.一定要获取根节点

dom4j.jar包链接:https://pan.baidu.com/s/1quJbnpGMKo-DIXn-kR98nA
提取码:shld
dom4j源码包:链接:https://pan.baidu.com/s/1H9QTrtsOZWPM24fWYA7RYQ 

提取码:9dai 

接下来写个简单的增删改查

先写一个XML
<?xml version="1.0" encoding="GBK"?>

<!-- 声明文档的版本和字符集 -->
<!-- 描述手机实体 -->
<phones> 
  <!-- 整个文档的根节点root -->  
  <phone id="001"> 
    <brand>华为</brand>  
    <type>P30 Pro</type>  
    <price>5438元</price>  
    <description>国人的骄傲,中华有为</description> 
  </phone>  
  <phone id="003"> 
    <brand>小米</brand>  
    <type>小米 Max3</type>  
    <price>3000</price>  
    <description>这是一款性价比很高的手机</description> 
  </phone>  

</phones>
public class XMLDemo {
    
    Document document; //文档对象
    public static void main(String[] args) throws Exception {
        XMLDemo demo=new XMLDemo();
        demo.getDocument();
        //demo.addElement();
        //demo.deleteElement();
        //demo.modityElement();
        demo.getPhoneById("001");
        demo.saveXML();//注意不管操作增删改查哪步操作都需要保存  也就是调用这个方法
    }
    
    //1:获取文档对象
    public void getDocument() throws Exception{
        //创建SAX读取器
        SAXReader reader=new SAXReader();
        document=reader.read(this.getClass().getResourceAsStream("/phone.xml"));
    }
    //2:增加元素操作
    public void addElement(){
        //dom4j的特点:通过根节点操作其他的节点
        Element root = document.getRootElement();//获取文档根元素
        //增加手机节点
        Element phone = root.addElement("phone");
        //为phone节点绑定id属性
        phone.addAttribute("id", "003");
        //依次增加子节点
        Element brand = phone.addElement("brand");//品牌
        Element type = phone.addElement("type");//机型
        Element price=phone.addElement("price");
        Element description = phone.addElement("description");//描述
        
        //设置文本值
        brand.addText("小米");
        type.addText("小米 Max3");
        price.addText("3600");
        description.addText("这是一款性价比很高的手机");
        
    }
    //删除元素操作
    public void deleteElement(){
        Element root = document.getRootElement();
        
        Iterator<Element> iter = root.elementIterator();//元素的迭代器
        
        while(iter.hasNext()){
            Element ele = iter.next();
            if(ele.attributeValue("id").equals("002")){ //满足对应的元素属性的id值为002,则删除
                root.remove(ele);
                break;
            }
        }
    }
    
    //修改元素操作
    public void modityElement(){
         Element root=document.getRootElement();
         
         Iterator<Element> iter1 = root.elementIterator();
         
         while(iter1.hasNext()){
             Element element = iter1.next();
             String id=element.attributeValue("id");
             if(id.equals("003")){
                 Iterator<Element> iterator = element.elementIterator();  
                 while(iterator.hasNext()){
                     Element ele = iterator.next();
                     if(ele.getName().equals("price")){
                         ele.setText("3000");
                     }
                 }
                 break;
             }
         }
    }
    
    //查询元素操作 根据Id查询手机信息
    public void getPhoneById(String id){
        Element root=document.getRootElement();
        
        Iterator<Element> iterator = root.elementIterator();
        
        while(iterator.hasNext()){
            Element next = iterator.next();
            if(next.attributeValue("id").equals(id)){ //phone
                Iterator<Element> subs = next.elementIterator(); //phone节点下的子节点
                while(subs.hasNext()){
                    System.out.print(subs.next().getText()+" ");
                }
                break;
            }
        }
    }
    
    //保存操作
    public void saveXML() throws IOException{
        FileWriter fw=new FileWriter(new File("F:\\MyEclipse Workspace\\XML&JSON\\resources\\phone.xml"));
        
        OutputFormat format=OutputFormat.createPrettyPrint();
        //设置字符集
        format.setEncoding("GBK");
        
        XMLWriter writer=new XMLWriter(fw,format);
        
        writer.write(document);
        
        writer.flush();
        
        writer.close();
        
        fw.close();
    }
    
}

 

posted on 2019-06-21 14:21  灰色...天空  阅读(114)  评论(0编辑  收藏  举报