zoukankan      html  css  js  c++  java
  • DOM4J使用教程

     

    DOM4j是一个易用的,开源的JAVA操作XML的API,写过一篇4种XML操作API的比较,DOM4j是性能和易用行最佳的。因此做一个小教程,供初学者学习。

             学习DOM4j首先就先来了解下它主要的包

                    DOM4j所有的接口都在org.dom4j这个包里定义着

                   org.dom4j.Attribute : Attribute接口定义了XML文件的属性

                   org.dom4j.Branch  : Branch为能够包含子节点的节点如XML元素和文档定义了一个公共行为

                   org.dom4j.CDATA  : CDATA定义了XML CDATA区域

                   org.dom4j.CharacterData: CharacterData是一个标识接口,标识基于字符的节点。

                   org.dom4j.Comment  : Comment定义了XML注释的行为

                   org.dom4j.Document : Docement接口定义了XML文档

                   org.dom4j.Element   : Element定义了XML元素

                   org.dom4j.ElementHandler: ElementHandler定义了Element对象的处理器

                   org.dom4j.ElementPath : 被ElementHandler使用,用于取得当前正在处理的路径层次信息

                   org.dom4j.Entity     : Entity定义XML entity

                   org.dom4j.Node :   Node为所有的dom4j中XML节点定义了多态行为

                   org.dom4j.NodeFilter :  NodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为

                   org.dom4j.ProcessingInstruction : ProcessingInstruction定义XML处理指令

                   org.dom4j.Text   : Test定义了XML文本节点

                   org.dom4j.Visitor : Visitor用于实现Visitor模式

                   org.dom4j.XPath : XPath在分析一个字符串后会提供一个XPath表达式

              下面说下主要的实用方法

              1:  读取并解析XML文档:

                   读写XML文档主要依赖于org.dom4j.io包,提供了DOMReader和SAXReader两类不同方式,调用方式一样。

               // 从文件读取XML,输入文件名,返回XML文档

        public Document read(String fileName) throws MalformedURLException, DocumentException {
          
                   SAXReader reader = new SAXReader();
     
                 Document document = reader.read(new File(fileName));
     
                 return document;
            }
       2:取得ROOT节点
             如果要读取一个XML文件,最重要的就是要读取ROOT节点了,一切分析XML都是从ROOT节点开始。
         
        public Element getRootElement(Document doc){
                 return doc.getRootElement();
         }
     
       3:遍历XML树,这里有二种方法
          (1): 枚举
               // 枚举所有子节点
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
           Element element = (Element) i.next();
           // do something
        }
        // 枚举名称为foo的节点
        for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
           Element foo = (Element) i.next();
           // do something
        }
        // 枚举属性
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
           Attribute attribute = (Attribute) i.next();
           // do something
        }
     
      (2) :  递归
         public void treeWalk() {
           treeWalk(getRootElement());
        }
        public void treeWalk(Element element) {
           for (int i = 0, size = element.nodeCount(); i < size; i++)     {
               Node node = element.node(i);
               if (node instanceof Element) {
                  treeWalk((Element) node);
               } else { // do something....
               }
           }
    }
     
      4:字符串与XML的转换
       // XML转字符串
      Document document = ...;
        String text = document.asXML();
      // 字符串转XML
        String text = <person></person> <name></name>James ;
        Document document = DocumentHelper.parseText(text);
     
      5. 创建XML
         这里创建一个XML,没有写
        public Document createDocument() {
           Document document = DocumentHelper.createDocument();
           Element root = document.addElement(root);
           Element author1 =
               root
                  .addElement(author)
                  .addAttribute(name, James)
                  .addAttribute(location, UK)
                  .addText(James Strachan);
           Element author2 =
               root
                  .addElement(author)
                  .addAttribute(name, Bob)
                  .addAttribute(location, US)
                  .addText(Bob McWhirter);
           return document;
        }
       6: XML 文件输出
       FileWriter out = new FileWriter( foo.xml );
        document.write(out);
      
     
        DOM4j 的简单常用的方法上面总结了下,大家可以有一个印象,想要学的仔细了就要自己好好研究了,下面有一个以前写的小程序,实现了对XML的增删改查的功能。
    这里的JBoltModuleMeta是个POJO对象,大家随便造个就可以随便修改XML
  • 相关阅读:
    8.C++-类的关键字
    BFS-九宫格重排(详解)
    7.C++类与封装的概念
    4.数码相框-freetype多行显示,居中显示
    3.数码相框-通过freetype库实现矢量显示
    Linux-iconv命令、并批处理将所有GBK文件转换为UTF8(18)
    2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)
    1.数码相框-相框框架分析(1)
    Kotlin 之操作符重载
    Andorid-解决View重复点击的思路
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152799.html
Copyright © 2011-2022 走看看