• DOM4J简介 


    DOM4J简介

    DOM4J是dom4j.org出品的一个开源XML解析包,DOM4J最大的特色是使用大量的接口,这也是它被认为比JDOM灵活的主要原因。
    它的主要接口都在org.dom4j这个包里定义:

    Attribute 定义了XML属性
    Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
    CDATA 定义了XML CDATA 区域
    CharacterData CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.
    Comment Comment 定义了XML注释的行为
    Document 定义了XML文档
    DocumentType DocumentType 定义XML DOCTYPE声明
    Element Element定义XML 元素
    ElementHandler ElementHandler定义了 Element 对象的处理器
    ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
    Entity Entity定义 XML entity
    Node Node为所有的dom4j中XML节点定义了多态行为
    NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
    ProcessingInstruction ProcessingInstruction 定义 XML 处理指令.
    Text Text 定义XML 文本节点.
    Visitor Visitor 用于实现Visitor模式.
    XPath XPath 在分析一个字符串后会提供一个XPath 表达式

    使用示例:

    1.创建XML文档
    首先必须先创建一个document对象来表示整个xml文档
    /** 建立document对象 /
    Document document = DocumentHelper.createDocument();
    为document对象增加直接节点(根节点)
    /
    * 建立XML文档的根books /
    Element booksElement = document.addElement("books");
    这里说明在xml文档里添加注释的方法,哪个标签调用添加注释的方法,注释就添加在哪个标签内
    /
    * 加入一行注释 /
    booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
    在根节点下再增加一个子节点,不是用文档对象调用方法,而是用根节点来调用方法
    /
    * 加入第一个book节点 /
    Element bookElement = booksElement.addElement("book");
    为这个新增加的节点加入一个属性
    /
    * 加入show属性内容 /
    bookElement.addAttribute("show", "yes");
    再在book标签下增加一个子节点title
    /
    * 加入title节点 /
    Element titleElement = bookElement.addElement("title");
    在title节点内设置文本
    /
    * 为title设置内容 /
    titleElement.setText("Dom4j Tutorials");
    写好了一个基本的xml文档,我们将其内容写入一个文件,用filename指定一个文件路径
    /
    * 将document中的内容写入文件中 */
    XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
    writer.write(document);
    writer.close();
    这里就基本完成了一个xml文件的创建。

    2.读取xml文件

    首先要用一个dom4j中专门用于读取xml文件的类来读取文件
    SAXReader saxReader = new SAXReader();
    把xml文件读取到我们新创建的document对象里去
    Document document = saxReader.read(filename);
    现在我们可以来读取这个xml文档中的内容,假如我要读取某个a标签的内容,用一个list来获取所有的a标签
    List list = document.selectNodes("/a");
    再用一个迭代器来获取这个list的所有成员
    Iterator iter = list.iterator();
    这样我们可以逐一获取所有的a标签,并读取它的内容,现假设我们要迭代读取a标签下的b标签的文本属性
    while (iter.hasNext()) {
    Element bookElement = (Element) iter.next();
    Iterator iterator = bookElement.elementIterator("b");
    while (iterator.hasNext()) {
    Element titleElement = (Element) iterator.next();
    System.out.println(titleElement.getText());
    }
    }
    到这里我们已经可以基本完成一个读取xml文件的功能。

    3.修改xml文件

    修改xml文件首先要读取xml文件
    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read(new File(filename));
    /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no /
    List list = document.selectNodes("/books/book/@show");//属性前要加@
    Iterator iter = list.iterator();
    while (iter.hasNext()) {
    Attribute attribute = (Attribute) iter.next();
    if (attribute.getValue().equals("yes")) {
    attribute.setValue("no");
    }
    }
    /
    *

    • 修改内容之二: 把owner项内容改为Tshinghua
      • 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type
        /
        list = document.selectNodes("/books/owner");
        iter = list.iterator();
        if (iter.hasNext()) {
        Element ownerElement = (Element) iter.next();
        ownerElement.setText("Tshinghua");
        Element dateElement = ownerElement.addElement("date");
        dateElement.setText("2004-09-11");
        dateElement.addAttribute("type", "Gregorian calendar");
        }
        /
        * 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 /
        list = document.selectNodes("/books/book");
        iter = list.iterator();
        while (iter.hasNext()) {
        Element bookElement = (Element) iter.next();
        Iterator iterator = bookElement.elementIterator("title");
        while (iterator.hasNext()) {
        Element titleElement = (Element) iterator.next();
        if (titleElement.getText().equals("Dom4j Tutorials")) {
        bookElement.remove(titleElement);
        }
        }
        }
        修改完毕后,同创建xml文件一样,将xml文档写入文件
        /
        * 将document中的内容写入文件中 */
        XMLWriter writer = new XMLWriter(new FileWriter(new File(
        newfilename)));
        writer.write(document);
        writer.close();
        这里我们就完成了基本的xml文件修改。
        如果要在某标签下删除某个子标签
        bookElement.remove(titleElement);

    作者:我是刘先生
    地址:https://www.cnblogs.com/cekaigongchengshi/
    文章转载请标明出处,如果,您认为阅读这篇博客让您有些收获,不妨点击一下推荐按钮,据说喜欢分享的,后来都成了大神

    欢迎扫码关注微信公众号
  • 相关阅读:
    PHP学习笔记-session
    [C语言] 插入排序之希尔(shell)排序的特性及实现
    [C语言] 插入排序之二分插入排序的特性及实现
    [C语言] 插入排序之直接插入排序的特性及实现
    [Linux环境编程] TCP通信与多线程编程实现“多人在线聊天室”
    [Linux环境编程] 信号的基本概念与操作函数
    [Linux环境编程] Linux系统命令“rm -rf”的实现
    [Linux环境编程] Linux系统命令“ls -R”的实现
    [Linux环境编程] Linux系统命令“ls -l”的实现
    [C语言] 单向链表的构建以及翻转算法_图文详解(附双向链表构建代码)
  • 原文地址:https://www.cnblogs.com/cekaigongchengshi/p/13731325.html
Copyright © 2020-2023  润新知