dom4j解析xml文档

注:

第三方的jar包。不是由SUN提供,需要自己去下载响应的jar,导入到工程中;
需要把dom4j-1.6.1.jar导入到工程中;
代码中有详细的注释,具体方法可参考dom4j的API;

public class Dom4jTest {
    
    public static void main(String[] args) {
        try {
            run5();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 对XPATH测试
     * @throws Exception
     */
    public static void run5() throws Exception{
        String path = "src/book2.xml";
        // 解析
        Document document = MyDom4jUtil.getDocument(path);
        // 原来获取根节点
        // 如果使用XPATH不用获取根节点
        // * List selectNodes(String xpathExpression)  
        // * Node selectSingleNode(String xpathExpression) 
        
        // List<Node> authors = document.selectNodes("/书架/书/作者");
        // 无论层级关系
        /*List<Node> authors = document.selectNodes("//作者");
        for (Node author : authors) {
            System.out.println(author.getText());
        }*/
        
        // /AAA/BBB[1]
        Node author = document.selectSingleNode("/书架/书[last()]/作者");
        System.out.println(author.getText());
        
    }
    
    /**
     * 在指定位置添加子节点
     * 在第二本书下的作者的节点之前添加狗的节点
     * @throws Exception
     */
    public static void run4() throws Exception{
        String path = "src/book2.xml";
        // 解析
        Document document = MyDom4jUtil.getDocument(path);
        // 获取根节点
        Element root = document.getRootElement();
        // 先获取第二本书
        Element book2 = (Element) root.elements("书").get(1);
        // 获取第二本书下的所有子节点
        List<Element> list = book2.elements();
        // 创建元素
        Element dog = DocumentHelper.createElement("狗");
        // 设置狗节点的文本内容
        dog.setText("大黄");
        // 操作list集合
        list.add(1, dog);
        // 回写
        MyDom4jUtil.writeXML(document, path);
    }
    
    
    /**
     * 修改文本内容
     * @throws Exception
     */
    public static void run3() throws Exception{
        String path = "src/book2.xml";
        // 解析
        Document document = MyDom4jUtil.getDocument(path);
        // 先获取根节点
        Element root = document.getRootElement();
        // 获取第二本书
        Element book2 = (Element) root.elements("书").get(1);
        // 获取团购价
        book2.element("团购价").setText("1999两");
        // 回写
        MyDom4jUtil.writeXML(document, path);
    }
    
    /**
     * 添加子节点
     * 在第二本书添加子节点
     * @throws Exception
     */
    public static void run2() throws Exception{
        // 获取解析器对象
        SAXReader reader = new SAXReader();
        // 解析XML文档,返回Document对象
        Document document = reader.read("src/book2.xml");
        // 获取根节点(书架的节点)
        Element root = document.getRootElement();
        // 获取第二本书
        Element book2 = (Element) root.elements("书").get(1);
        // 添加子节点    addElement()
        Element tgj = book2.addElement("团购价");
        // 设置文本的内容
        tgj.setText("9两");
        
        // 设置好看的格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        // 设置紧凑的格式
        // OutputFormat format = OutputFormat.createCompactFormat();
        // 设置XML文件的编码
        format.setEncoding("UTF-8");
        // 回写(XMLWriter类) 设置格式    设置编码
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"),format);
        // 把document写到xml文件中
        writer.write(document);
        // 关闭流
        writer.close();
    }
    
    /**
     * 获取作者标签的文本内容
     * @throws Exception 
     */
    public static void run1() throws Exception{
        // 获取解析器对象SAXReader(DOM4J的SAX的解析器)
        SAXReader reader = new SAXReader();
        // 解析XML的文档
        Document document = reader.read("src/book2.xml");
        // 记住1:如果想完成解析,必须先获取根节点
        Element root = document.getRootElement();
        // 记住2:DOM4J的解析必须是一层一层的解析
        // 获取书架下面的书的节点
        List<Element> books = root.elements("书");
        // 循环遍历 
        for (Element book : books) {
            // 循环一次,获取作者的标签
            Element author = book.element("作者");
            // 获取文本内容
            System.out.println(author.getText());
        }
    }

}

 




posted @ 2017-07-27 11:16  文海小痞  阅读(143)  评论(0编辑  收藏  举报