/*
 * 使用dom4j实现修改节点的操作
 *  修改第一个head下面的age元素的值<age>30</age>
 *      1、得到document
 *      2、得到根节点 然后得到第一个head元素
 *      3、得到第一个head下面的age
 *          element("")方法
 *      4、修改值30
 *          使用setText("文本内容")方法
 *      5、回写xml
 * 使用dom4j实现删除节点的操作
 *      删除第一个head下面的titile元素    
 * 
 *          1、得到document
 *          2、得到根节点
 *          3、得到第一个head标签
 *          4、得到第一个head下面的title元素
 *          5、删除(使用head删除title)
 *              得到school的父节点
 *                  第一种直接得到head
 *                  使用方法 getParent方法得到
 *              删除操作
 *                  在head上面执行remove方法删除节点
 *          6、回写xml
 * 使用dom4j获取属性的操作
 *  获取第一个head里面的属性id的值
 *  步骤
 *      1、得到document
 *      2、得到根节点
 *      3、得到第一个head元素
 *      4、得到head里面的属性值
 *          attributeValue("id");
 *          在head上面执行这个方法 里面的参数是属性名称
 *      
 * 使用dom4j支持xpath的操作
 *  可以直接获取到某个元素
 *  第一种形式
 *      /aa/bb/cc 表示一层一层的 aa下面 bb下面的cc
 *  第二种形式
 *      //bbb 表示和这个名称相同表示只要名称是bbb都得到
 *  第三种形式
 *      /* 所有元素
 *  第四种形式
 *      bbb[1] 表示第一个bbb元素
 *      bbb[last()] 表示最后一个bbb元素
 *  第五种形式
 *      //bb[@id] 表示只要bb元素上面有id属性 都得到
 *  第六种形式
 *      //bbb[@id='b1']  表示元素名称是bbb 在bbb上面有id属性 并且id属性是b1   
 */
public class TestDom4j02 {
    public static String path = "src/ee/11.xml";
    public static void main(String[] args) throws Exception {
        //changeAge();
//      deleteTitle();
        getAttr();
    }
    //获取第一个head里面的属性 id的值
    public static void  getAttr() throws Exception {
        /*
         * 1、得到document
         * 2、得到根节点
         * 3、得到第一个head
         * 4、得到head里面的属性值
         */
        //得到document
        Document document = domUtils.document(path);
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个head元素
        Element head = root.element("head");
        //得到head里面的属性值
        String value = head.attributeValue("id");
        System.out.println(value);
    }
    //删除第一个head下面的title元素
    private static void deleteTitle() throws Exception {
        /*
         * 1、得到document
         * 2、得到根节点
         * 3、得到第一个head标签
         * 4、得到第一个head下面的title元素
         * 5、删除(使用head删除title
         * 6、回写xml
         */
        //得到document ctrl shift o 快速导包
        Document document = domUtils.document(path);
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个head元素
        Element head = root.element("head");
        //得到head下面的title元素
        Element title = head.element("title");
        //删除title元素
        //通过父节点删除
        //获取父节点的方法 getParent()
//      Element parent = title.getParent();
//      parent.remove(title);
        head.remove(title);
        //回写xml
        OutputFormat of = OutputFormat.createPrettyPrint();
        XMLWriter xmlw = new XMLWriter(new FileOutputStream("2.xml"),of);
        xmlw.write(document);
        xmlw.close();
    }

    //修改第一个head下面的age元素的值<age>30</age>
    private static void changeAge() throws Exception {
        /*
         * 1、得到document
         * 2、得到根节点 然后得到第一个head元素
         * 3、得到第一个head下面的age
         * 4、修改值是30
         * 5、回写xml
         */
        //得到document
        SAXReader saxr = new SAXReader();
        Document document = saxr.read("src/ee/11.out.xml");
        //得到根节点
        Element root = document.getRootElement();
        //得到第一个head
        Element head =  root.element("head");
        //得到head下面的age
        Element age = head.element("age");
        //修改age的值
        age.setText("33");
        //回写xml
        OutputFormat of = OutputFormat.createPrettyPrint(); 
        XMLWriter xmlw  = new XMLWriter(new FileOutputStream("1.xml"),of);
        xmlw.write(document);
        xmlw.close();
    }


}

domutil

public class domUtils {
    //java是强类型的语言 需要赋予类型
    public static Document document(String path) throws Exception {
        SAXReader saxr = new SAXReader();
        Document document = saxr.read(path);
        return document;
    }
    public static XMLWriter xmlw(String path) throws UnsupportedEncodingException, FileNotFoundException {
        OutputFormat of = OutputFormat.createPrettyPrint();
        XMLWriter xmlw = new XMLWriter(new FileOutputStream(path),of);
        return xmlw;
    }
}