import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 *
 * dom4j生成与解析XML文档
 *
*/
public classDom4jDemo {

    /**
     * 利用dom4j进行xml文档的写入操作
     */
    public void createXml(File file) {

        // XML 声明 <?xmlversion="1.0" encoding="UTF-8"?> 自动添加到 XML文档中

        // 使用DocumentHelper类创建文档实例(生成 XML文档节点的 dom4jAPI工厂类)
        Document document =DocumentHelper.createDocument();

        // 使用addElement()方法创建根元素employees(用于向 XML 文档中增加元素)
        Element root =document.addElement("employees");

        // 在根元素中使用 addComment()方法添加注释"AnXML Note"
        root.addComment("An XMLNote");

        // 在根元素中使用addProcessingInstruction()方法增加一个处理指令
        root.addProcessingInstruction("target","text");

        // 在根元素中使用 addElement()方法增加employee元素。
        Element empElem =root.addElement("employee");

        // 使用 addAttribute()方法向employee元素添加id和name属性
        empElem.addAttribute("id","0001");
        empElem.addAttribute("name","wanglp");

        // 向employee元素中添加sex元素
        Element sexElem =empElem.addElement("sex");
        // 使用setText()方法设置sex元素的文本
        sexElem.setText("m");

        // 在employee元素中增加age元素 并设置该元素的文本。
        Element ageElem =empElem.addElement("age");
        ageElem.setText("25");

        // 在根元素中使用 addElement()方法增加employee元素。
        Element emp2Elem =root.addElement("employee");

        // 使用 addAttribute()方法向employee元素添加id和name属性
        emp2Elem.addAttribute("id","0002");
        emp2Elem.addAttribute("name","fox");

        // 向employee元素中添加sex元素
        Element sex2Elem =emp2Elem.addElement("sex");
        // 使用setText()方法设置sex元素的文本
        sex2Elem.setText("f");

        // 在employee元素中增加age元素 并设置该元素的文本。
        Element age2Elem =emp2Elem.addElement("age");
        age2Elem.setText("24");

        // 可以使用 addDocType()方法添加文档类型说明。
        //document.addDocType("employees", null,"file://E:/Dtds/dom4j.dtd");
        // 这样就向 XML 文档中增加文档类型说明:
        // <!DOCTYPE employees SYSTEM"file://E:/Dtds/dom4j.dtd">
        // 如果文档要使用文档类型定义(DTD)文档验证则必须有Doctype。

        try {
            XMLWriter output = newXMLWriter(new FileWriter(file));
            output.write(document);
            output.close();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * 利用dom4j进行xml文档的读取操作
     */
    public void parserXml(File file) {

        Document document = null;

        // 使用 SAXReader 解析 XML 文档catalog.xml:
        SAXReader saxReader = new SAXReader();

        try {
            document = saxReader.read(file);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        // 将字符串转为XML
        // document = DocumentHelper.parseText(fileString);

        // 获取根节点
        Element root =document.getRootElement();
        // 打印节点名称
        System.out.println("<" +root.getName() + ">");

        // 获取根节点下的子节点遍历
        Iterator<?> iter =root.elementIterator("employee");
        // 遍历employee节点
        while (iter.hasNext()) {
            // 获取当前子节点
            Element empEle = (Element)iter.next();
            System.out.println("<"+ empEle.getName() + ">");

            // 获取当前子节点的属性遍历
            Iterator<?> attrList = empEle.attributeIterator();
            while (attrList.hasNext()) {
                Attribute attr = (Attribute)attrList.next();
               System.out.println(attr.getName() + "=" + attr.getValue());
            }

            // 遍历employee节点下所有子节点
            Iterator<?> eleIte =empEle.elementIterator();
            while (eleIte.hasNext()) {
                Element ele = (Element)eleIte.next();
               System.out.println("<" + ele.getName() + ">" +ele.getTextTrim());
            }

            // 获取employee节点下的子节点sex值
            // String sex =empEle.elementTextTrim("sex");
            //System.out.println("sex:" + sex);

        }
        System.out.println("</" +root.getName() + ">");
    }
 
 public static void main(String[] args) {

        Dom4jDemo dom4j = new Dom4jDemo();
        File file = newFile("e:/dom4j.xml");
        // dom4j.createXml(file);

        dom4j.parserXml(file);

    }
}

DOM4J生成、解析XML实例的更多相关文章

  1. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  2. Python 解析XML实例(xml.sax)

    已知movies.xml <collection shelf="New Arrivals"> <movie title="Enemy Behind&qu ...

  3. java dom4j解析xml实例(2)

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  4. java dom4j解析xml实例

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  5. JDOM生成、解析XML实例

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  6. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  7. DOM4J方式解析XML文件

    dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory dom4j是一个简单的开源库,用于处理XML. X ...

  8. 【Android】使用Pull生成/解析XML文件

    一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...

  9. dom4j递归解析XML字符串所有子节点

    /** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...

随机推荐

  1. [AtCoder arc090E]Avoiding Collision

    Description 题库链接 给出一张 \(N\) 个节点, \(M\) 条边的无向图,给出起点 \(S\) 和终点 \(T\) .询问两个人分别从 \(S\) 和 \(T\) 出发,走最短路不相 ...

  2. NOIP 2007树网的核

    题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...

  3. 紧急疏散evacuate

    1689: [HNOI2007]紧急疏散evacuate 题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是".",那么表示这是一块空地 ...

  4. Hdu2680 最短路

    给定一个有向图,多个起点,一个终点,求起点到终点的最短路. 1.可以加一个点,使其与那些起点的距离为0 2.将图反着来建,然后在所有点找出最小的 方案一: #include <iostream& ...

  5. ●BZOJ 4516 [Sdoi2016]生成魔咒

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题解: 把串反过来后,问题变为求每个后缀的互不相同的子串个数.首先用倍增算法求出 sa ...

  6. POJ2774 很长的信息

    Description Little cat在Byterland的首都读物理专业.这些天他收到了一条悲伤地信息:他的母亲生病了.担心买火车票花钱太多(Byterland是一个巨大的国家,因此他坐火车回 ...

  7. [UOJ UNR#2 UOJ拯救计划]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 感觉这题有点神... 模数是6比较奇怪,考虑计算答案的式子. Ans=$\sum_{i=1}^{k} P(k,i)*ans(i)$ a ...

  8. Python中tuple的功能介绍

    Tuple的功能介绍 1. 元祖的两种方法 1. 元祖的内置方法 两个元祖的相加 格式:x.__add__(y)等同于x+y 例如:tu1 = (1,2,3,) print(tu1.__add__(( ...

  9. C语言程序第一次作业

    (一)实验总结 1. 求圆面积和周长 (1)题目 输入圆的半径,计算圆的周长和面积. (2)流程图 (3)测试数据及运行结果 测试数据1:r=2 运行结果: (4)实验分析 没有问题 2.判断闰年 ( ...

  10. 浅谈Java中的equals和==与hashCode

    转载:https://www.cnblogs.com/dolphin0520/p/3592500.html 参考:http://blog.csdn.net/yinzhijiezhan/article/ ...