XML解析之DOM4J

来源:互联网 发布:阿里云市值 编辑:程序博客网 时间:2024/05/14 00:45
XML解析:
    * 解析xml可以做:
        * 如果xml作为配置文件:读取
        * 如果xml作为传输文件:写,读

    * xml解析思想:
        * DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
            * 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
            * 缺点:dom树非常占内存,解析速度慢。
        
            Document
            Element
            Text
            Attribute
            Comment


        * SAX:逐行读取,基于事件驱动
            * 优点:不占内存,速度快
            * 缺点:只能读取,不能回写

        
    * xml常用的解析器:
        * JAXP:sun公司提供的解析。支持dom和sax。
        * JDOM:
        * DOM4J:dom for java民间方式,但是是事实方式。非常好。  支持dom
            1.导入jar包 dom4j.jar
            2.创建解析器
                SAXReader reader = new SAXReader();
            3.解析xml 获得document对象
                Document document = reader.read(url); 

    

   实例 解析XML如下(两个案例):

       接下如下.XML文件

 <书架>
  <书 出版社="黑马程序员">
    <书名>金瓶梅</书名>  
    <作者>陈冠希</作者>  
    <单价>10</单价>  
    <批发价>20</批发价>
  </书>  
  <书>
    <书名>葵花宝典</书名>  
    <作者>东方不败</作者>  
    <单价>10</单价>
  </书>
</书架>

        // 1、得到某个具体的节点内容:第2本书的书名--》葵花宝典

             public void testDom4j() throws DocumentException{
        //创建一个解析器
        SAXReader reader=new SAXReader();
        //将xml加载到document对象中
        Document document=reader.read("src/Book.xml");
        //获取根节点
        Element root=document.getRootElement();
        //获取根节点姓名
        String rootName=root.getName();
        //输出‘书架’
        System.out.println(rootName);
        /*Element bookNode=root.element("书");
        System.out.println(bookNode.getName());*/
        List list=root.elements();//获取根节点下的所有子节点
        Element secondNode=(Element) list.get(1);//获取第二本书对象
        String secondNodeName=secondNode.getName();
        //输出第二个对象的节点名称("书")
        System.out.println(secondNodeName);
        //获取第二个对象下的书名节点中的内容
        String  secondName=secondNode.element("书名").getText();
        //输出葵花宝典
        System.out.println(secondName);
        
    }

        // 2、遍历所有元素节点
   public void test() throws DocumentException{
        SAXReader reader=new SAXReader();
        Document document=reader.read("src/Book.xml");
        Element root=document.getRootElement();
        treeWalk(root);
    }
    public void treeWalk(Element ele){
        //获取当前节点的名字
        String name=ele.getName();
        for(int i=0;i<ele.nodeCount();i++){
            //取下标为i的节点
            Node node=ele.node(i);
            if(node instanceof Element){
                treeWalk((Element)node);
            }else{
                System.out.println(node.getText());
            }
        }

    }

这样解析出xml文件中的内容

原创粉丝点击