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

来源:互联网 发布:vba聊天软件编程 编辑:程序博客网 时间:2024/06/11 08:16
/*         * 使用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);        }