zoukankan      html  css  js  c++  java
  • Dom4J解析XML

    首先先介绍一下方法

    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();
        }
        
    }
    努力到无能为力,拼搏到感动自己
  • 相关阅读:
    centOS7 mini配置linux服务器(三) 配置防火墙以及IPtables切换
    Linux的常用基本命令。
    centOS7 mini配置linux服务器(二) 配置IP
    分享Git的一些个人配置
    Firefox中Vimperator插件配置
    Linux下修改键盘默认布局
    Git对于单个文件的分批提交方式的使用
    Linux安装Monaco字体
    浮点与整形在GUI下的相关思考
    2D简单图形相关算法罗列
  • 原文地址:https://www.cnblogs.com/tkzm/p/11064275.html
Copyright © 2011-2022 走看看