大二上假期学习——Day03——dom4j的CRUD、schema

一、dom4j的增删改查

1.增删改查

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
    
    public void attr() throw Exception{
        //1.获取解析器
        SAXReader reader = new SAXReader;
        //2.解析xml,获取代表整个文档的dom文件
        Document dom = reader.read("book.xml");
        //3.获取根节点
        Element root = dom.getRootElement();
        
        
        Element bookEle = root.element;
        //添加属性
        bookEle.addAttribute("出版社","xx出版社");
        
        //返回属性
        String str = bookEle.attributeValue("出版社");
        System.out.println(str);
        
        //删除属性
        Attribute attr = bookEle.attribute("出版社");
        attr.getParent().remove(attr);
        
        XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint()) 
        writer.write(dom);
        writer.close();    
    }
    
    public void del() throw Exception{
        //1.获取解析器
        SAXReader reader = new SAXReader;
        //2.解析xml,获取代表整个文档的dom文件
        Document dom = reader.read("book.xml");
        //3.获取根节点
        Element root = dom.getRootElement();
        
        Element price2Ele = root.element("书").element("特价");
        price2Ele.getParent().remove(price2Ele); 
        writer.write(dom);
        writer.close();    
    }
    
    public void update() throw Exception{
        //1.获取解析器
        SAXReader reader = new SAXReader;
        //2.解析xml,获取代表整个文档的dom文件
        Document dom = reader.read("book.xml");
        //3.获取根节点
        Element root = dom.getRootElement();
        
        root.element("书").element("特价").setText("4元");
        XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint()) 
        writer.write(dom);
        writer.close();    
    }
    
    public void add() throw Exception{
        //1.获取解析器
        SAXReader reader = new SAXReader;
        //2.解析xml,获取代表整个文档的dom文件
        Document dom = reader.read("book.xml");
        //3.获取根节点
        Element root = dom.getRootElement();
        
        //创建<特价>节点,设置标签体
        Element price2Ele = DocumentHelper.createElement("特价");
        price2Ele.setText("40元");
        //获取父标签<书>将特价节点挂载上去
        Element bookEle = root.Element("书");
        bookEle.add(price2Ele);
        
        //1.将内存中的dom树写到xml文件中,从而使xml中的数据进行更新
        FileWriter writer = new FileWriter("book.xml");
        dom.write(writer);
        writer.flush();
        writer.close();
        
        //2.
        XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint());
        writer.write(dom);
        writer.close();
    }
    
    public void find() throw Exception{
        //1.获取解析器
        SAXReader reader = new SAXReader;
        //2.解析xml,获取代表整个文档的dom文件
        Document dom = reader.read("book.xml");
        //3.获取根节点
        Element root = dom.getRootElement();
        
        List <Element> list = root.elements();//获取元素表
        Element book2Ele = list.get(1);//获取第二个元素
        System.out.println(book2Ele.element("书名").getText());//输出
    }
}

二、schema -- xml的约束技术

1.schema和dtd:

schema是xml的约束技术,出现的目的是为了替代dtd

2.特点:

1)本身也是xml,非常方便使用xml的解析引擎进行解析;

2)对名称空间有非常好的支持;

3)支持更多的数据类型,并且支持用户自定义数据类型;

4)可以进行语义级别的限定,限定能力大大强于dtd;

5)相对于dtd不支持实体;

6)比dtd更复杂,学习成本高;

3.要求:

掌握名称空间的概念,会读简单的schema

4. 快速入门:

1)

2)名称空间namespace:

本质上是独一无二的名字,作用是为了能够独一无二的标识资源而起的名字,为了保证名字独一无二,一般使用开发者公司的域名进行一些扩展来保证名称空间的独一无二,名称空间只是一个名字而已,不是真的地址,访问这个地址并不能真的访问到这个资源。

3)

 

posted @ 2023-02-09 20:56  sodamate  阅读(22)  评论(0编辑  收藏  举报