javawebday08补充(jaxp的sax解析 dom4j解析xml 查询 添加 )

/*
         * 使用jaxp的sax方式解析xml
         *  sax方式不能实现增删改操作 只能做查询操作
         *  打印整个文档
         *  执行parse方法 第一个参数xml路径 第二个参数 是事件处理器
         *      创建一个类 继承事件处理器的类
         *      重写里面的三个方法
         *  获取到所有的name元素的值
         *      定义一个成员变量 flag=false
         *      判断开始方法是否是name元素 如果是name元素 把flag值设置成 true
         *      如果flag值是truecharacters方法里面打印内容
         *      当执行到结束方法时候把 flag值设置成false
         *  获取第一个name元素的值   
         *      定义一个成员变量 index=0
         *      在结束方法时候 index+1 index++
         *      想要打印出第一个name元素的值
         *          在characters方法里面判断
         *          判断flag=true 并且 index==0 再打印内容
         *  使用dom4j解析xml
         *      dom4j 是一个组织 针对xml解析 提供解析器 dom4j
         *      dom4j不是javase的一部分 想要使用第一步需要
         *          导入dom4j提供的jar包
         *          创建一个文件夹lib
         *          复制jar包到lib下面
         *          右键jar包 build path --  add to buildpath
         *          看到jar包 变成奶瓶样子 表示导入成功
         *      得到document
         *          SAXReader reader = new SAXReader();
         *          Document document = reader.read();
         *      document的父接口是Node
         *          如果在document里面找不到方法 在Node里面找
         *      document里面的方法 getRootElement() 获取根节点 返回的是Element
         *      Element也是一个接口 父接口是Node
         *          Element和Node里面方法
         *          getParent() 获取父节点
         *          addElement() 添加标签
         *          element(qName)
         *                  表示获取标签下面的第一个子标签
         *                  qname标签的名称
         *          elements(qName)
         *                  获取标签下面的是这个名称的所有子标签(一层)
         *                  qname 标签名称
         *          elements()
         *                  获取标签下面的所有一层子标签
         *  使用dom4j查询xml
         *      解析是从上到下的解析
         *      查询所有name元素里面的值
         *          1、创建解析器
         *          2、得到一个document
         *          3、得到根节点 getRootElement() 返回Element
         * 
         *          4、得到所有的p1标签
         *              elements("head") 返回list集合
         *              遍历list得到每一个head
         *          5、得到name
         *              在head 下面执行element("name")方法 返回Element
         *          6、得到name里面的值
         *              getText()方法得到值
         * 查询第一个name元素的值
         *          1、创建解析器
         *          2、得到一个document
         *          3、得到根节点 getRootElement() 返回Element
         * 
         *          4、得到所有的p1标签
         *              element("head") 返回Element
         *          5、得到name
         *              在head 下面执行element("name")方法 返回Element
         *          6、得到name里面的值
         *              getText()方法得到值
         * 获取第二个title元素的值
         *          1、创建解析器
         *          2、得到一个document
         *          3、得到根节点 getRootElement() 返回Element
         * 
         *          4、得到所有的head标签
         *              elements("head") 返回list集合
         *          5、遍历得到第二个head
         *              使用list下标得到 get方法  集合的下标从0开始 想要得到第二个 下标写1
         * 
         *          6、得到第二个head里面的title
         *              element("title") 方法 返回Element
         *          7、得到title的值
         *              getText()方法
         * 使用dom4j实现添加操作
         *  在第一个head标签末尾添加一个元素<age>11</age>
         *  步骤
         *      1、创建解析器
         *      2、得到document
         *      3、得到根节点
         *      4、获取到第一个head
         *          使用element方法
         *      5、在head下面添加元素
         *          在head上面直接使用addElement("标签名称") 方法 返回一个Element
         *      6、在添加完成滞后的元素下面添加文本          
         *          在age上面直接使用 setText("文本内容")方法    
         *      7、回写xml
         *          格式化 OutputFormat 使用 createPrettyPrint 方法 表示一个漂亮的格式
         *          使用类XMLWriter 直接new 这个类 传递两个参数
         *              第一个参数是xml文件路径 new FileOutputStream("路径")
         *              第二个参数是格式化类的名称
         * 在特定的位置添加元素
         *  在第一个head下面的age标签添加<school>abc</school>
         *  步骤
         *      1、创建解析器
         *      2、得到document
         *      3、得到根节点
         *      4、获取到第一个head    
         *      5、获取head下面年的所有的元素
         *          elements()方法 返回list集合
         *          使用list里面的方法 在特定位置添加元素
         *              首先创建 元素 在元素下面创建文本
         *                  使用DocumentHelper类方法 createElement创建标签
         *                  把文本添加到标签下面 使用setText("文本内容")方法
         *              list集合里面的add(int index,E element)
         *                  第一个参数是 位置下标 从0开始
         *                  第二个参数是 要添加的元素
         *      6、回写xml
         * 
         * 可以对得到document的操作和回写xml的操作 封装成方法
         * 也可以把传递的文件连接 封装成一个常量
         * 好处 可以提高开发速度 可以提高代码可维护性
         *  比如想要修改文件路径(名称) 这个时候只需要修改常量的值就行了
         */ 
//在第一个head标签下的age标签之前添加<school>abc</school>
    public static void addSchool() throws Exception{
        /*
         * 1、得到根节点
         * 2、获取到第一个head
         * 3、获取head下面的所有元素
         *  elements()方法 返回list集合
         *  使用list里面的方法在特定位置添加元素
         *  创建元素
         *      add(int index,E element)
         *          第一个参数是位置下标 从0开始
         *          第二个参数是要添加的元素
         * 4、回写xml
         */
        //创建解析器
        SAXReader saxr = new SAXReader();
        //得到document
        Document document = saxr.read("src\\ee\\11.out.xml");
        //得到根结点
        Element root = document.getRootElement();
        //获取到第一个head
        Element head = root.element("head");
        //获取head下面的所有元素
        List<Element> list =  head.elements();
        //创建元素 使用
        Element school = DocumentHelper.createElement("school");
        //在school上面创建文本
        school.setText("abc");
        //在特定的位置添加
        list.add(0, school);
        //上面的操作都在内存中完成 还需要回写到xml中
        //回写xml
        OutputFormat of = OutputFormat.createPrettyPrint();
        XMLWriter xmlw = new XMLWriter(new FileOutputStream("src\\ee\\12.out.xml"),of);
        //把操作的文档写入到xml里面 如果没有 文件写不出去
        xmlw.write(document);
        xmlw.close();
    } 
    //在第一个head标签末尾添加一个元素<age>11</age>
    public static void addAge() throws Exception{
        /*
         * 1、得到根节点
         * 2、获取到第一个head
         * 3、在head下面添加元素
         * 4、在添加完成之后的元素下面添加文本
         * 5、回写xml
         */
        //创建解析器
        SAXReader saxr = new SAXReader();
        //得到document
        Document document = saxr.read("src\\ee\\11.out.xml");
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个head元素
        Element head = root.element("head");
        //在下面直接添加元素
        Element age = head.addElement("age");
        //在age下面添加文本
        age.setText("11");
        //回写xml
        OutputFormat of = OutputFormat.createPrettyPrint();//可以有缩进的效果
        //OutputFormat of = OutputFormat.createCompactFormat();//都一行 压缩的格式
        XMLWriter xmlw = new XMLWriter(new FileOutputStream("src/ee/11.out.xml"),of);
        xmlw.write(document);
        xmlw.close();
    }
    //得到第二个title元素的值
    public static void selectSecond() throws Exception {
        /*
         * 1、得到根节点
         * 2、得到head标签
         * 3、遍历得到第二个head
         * 4、得到第二个head下面的title
         * 5、得到title的值
         */
        Element root = getRoot();
        //得到所有的head
        List<Element> list = root.elements("head");
        //得到第二个head list 集合下标从0开始
        Element h2 = list.get(1);
        //得到h2下面的title
        Element title = h2.element("title");
        //得到title里面的值
        String s = title.getText();
        System.out.println(s);

    }
    //获取到第一个title元素的值
    public static void selectFirst() throws Exception {
        /*
         * 1、创建解析器
         * 2、得到document
         * 3、得到根节点
         * 4、得到第一个head元素
         * 5、得到head下面的title元素
         * 6、得到title元素里面的值
         */
        //创建解析器
        Element root = getRoot();
        //得到第一个head元素
        Element head = root.element("head");
        //得到head下面的title元素
        Element title = head.element("title");
        //得到title元素里面的值
        String s = title.getText();
        System.out.println(s);
    }
    private static Element getRoot() throws DocumentException {
        SAXReader saxr = new SAXReader();
        //得到document
        Document document = saxr.read("src\\ee\\11.out.xml");
        //得到根节点
        Element root = document.getRootElement();
        return root;
    }
    //查选xml中所有title元素的值
    public static void selecttitle() throws Exception {
        Element root = getRoot();
        //得到head
        List<Element> list  = root.elements("head");
        //遍历list
        for (Element element : list) {
            //element是每一个head元素
            //得到head下的title元素
            Element title =  element.element("title");
            //得到title里面的值
            String s = title.getText();
            System.out.println(s);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值