`

入门:用dom4j 解析xml 和生成xml

阅读更多
xml/students.xml

<?xml version="1.0" encoding="UTF-8"?>
<students> 
    <student sn="1"> 
        <name>张三</name> 
        <age>18</age> 
        <college leader="one">TingHua University</college>
        <telephone>01011111111</telephone>
        <notes>Best students!</notes>
    </student> 
    <student sn="2"> 
        <name>李四</name> 
        <age>20</age>
        <college leader="two">BeiJing University</college>
        <telephone>01022222222</telephone> 
        <notes>Better students!</notes>
    </student>
    <student> 
        <name>王五</name> 
        <age>22</age>
        <college>JiaLiDun University</college>
        <telephone>01033333333</telephone> 
        <notes>Bad students!</notes>
    </student> 
</students>

 

1.Dom4jReadExample.java
package com.dom4j;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;

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

/**
 * 利用dom4j解析XML
 *
 * @author Daniel Cheng
 */
public class Dom4jReadExample {
    /**
     * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中
     *
     * @param filename
     *            String 待遍历的XML文件(相对路径或者绝对路径)
     * @param hm
     *            HashMap
     *            存放遍历结果,格式:<nodename,nodevalue>或者<nodename+attrname,attrvalue>
     */
    public void iterateWholeXML(String filename, HashMap<String, String> hm) {
        SAXReader saxReader = new SAXReader();
        try {
            Document document = saxReader.read(new File(filename));
            Element root = document.getRootElement();
            // 用于记录学生编号的变量
            int num = -1;
            // 遍历根结点(students)的所有孩子节点(student节点)
            for (Iterator<?> iter = root.elementIterator(); iter.hasNext();) {
                Element element = (Element) iter.next();
                num++;
                // 获取student节点的sn编号属性的值
                Attribute snAttr = element.attribute("sn");
                if (snAttr != null) {
                    String sn = snAttr.getValue();
                    if (sn != null && !sn.equals("")) {
                        hm.put(element.getName() + "-" + snAttr.getName()
                                + num, sn);
                    } else {
                        hm.put(element.getName() + "-" + snAttr.getName()
                                + num, ""+(num+1));
                    }
                } else {
                    hm.put(element.getName() + "-sn" + num,""+(num+1));
                }
                // 遍历student结点的所有孩子节点(即name,college,telephone,notes),并进行处理
                for (Iterator<?> iterInner = element.elementIterator(); iterInner
                        .hasNext();) {
                    Element elementInner = (Element) iterInner.next();
                    if (elementInner.getName().equals("college")) {
                        hm.put(elementInner.getName() + num, elementInner
                                .getText());
                        // 获取college节点的leader属性的值
                        Attribute leaderAttr = elementInner.attribute("leader");
                        if (leaderAttr != null) {
                            String leader = leaderAttr.getValue();
                            if (leader != null && !leader.equals("")) {
                                hm.put(elementInner.getName() + "-"
                                        + leaderAttr.getName() + num, leader);
                            } else {
                                hm.put(elementInner.getName() + "-"
                                        + leaderAttr.getName() + num, "leader");
                            }
                        } else {
                            hm.put(elementInner.getName() + "-leader" + num,
                                    "leader");
                        }
                    } else {
                        hm.put(elementInner.getName() + num, elementInner
                                .getText());
                    }
                }
            }

        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
   
    public static void main(String[]args){
        HashMap<String, String> hm=new HashMap<String, String>();
        new Dom4jReadExample().iterateWholeXML("xml/students.xml",hm);
        System.out.println(hm.size());
        System.out.println(hm.toString());
    }
}
2.Dom4jXML.java
/*用dom4j生成xml*/
package com.dom4j;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Dom4jXML {
/**
* 利用dom4j生成XML
*
* @author Daniel Cheng
*/

public void createXML() {
//用工厂类创建一个document实例
Document doc = DocumentHelper.createDocument();
//创建根元素emps
Element rootEle = doc.addElement("emps");
//添加注释
rootEle.addComment("这是一个dom4j生成的xml文件");
//emps根节点下创建一个emp节点
Element empEle = rootEle.addElement("emp");
//emp添加属性id="1"
empEle.addAttribute("id", "1");
//emp节点下创建一个name节点
Element nameEle = empEle.addElement("name");
//name节点下创建一个文本节点zhangsan
nameEle.setText("Daniel Cheng");
//再为name节点创建一个兄弟节点
Element sexEle = empEle.addElement("sex");
sexEle.setText("man");
//将document中的内容写入文件中
try {
Writer out = new FileWriter("xml/emps.xml");
//格式化输出,类型IE浏览一样
OutputFormat format = OutputFormat.createPrettyPrint();
//OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//创建写出对象
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
System.out.println("生成emps.xml成功。");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("失败了。");
}
}
public static void main(String[] args) {
new Dom4jXML().createXML();
}

} 

 

xml/emps.xml文档内容
<?xml version="1.0" encoding="UTF-8"?>

<emps>
  <!--这是一个dom4j生成的xml文件-->
  <emp id="1">
    <name>Daniel Cheng</name>
    <sex>man</sex>
  </emp>
</emps>

 

分享到:
评论

相关推荐

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    4种最主流、最全面、最详细的生成和解析xml的4种方式,包括Dom,Dom4j,Sax,JDom,读懂了绝对好用xml,非常好的入门项目,而且精心排版,逻辑清晰

    xml入门教程/xml入门教程

    2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标签和标签的内容加在一起叫作一个元素。xml是大小写 敏感的,只能以字母或下划线开头。 字符转义 &lt; 代表 ", &gt; 代表 "&gt;" , &...

    C#XML入门经典 C#编程人员必备的XML技能.part2

    C# XML入门经典——C#编程人员必备的XML技能 作者:[美]Stewart Fraser, Steven 著,毛尧飞,崔伟 译 出版社:清华大学出版社 出版时间:2003年11月 第1章 在C#中使用XML的原因 &lt;br&gt;1.1 使用XML的原因...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML使用文档对象模型(DOM),这意味着XML数据被解析成一个可被浏览和操作的C++对象,然后它可以被写到磁盘或者另一个输出流中。你也可以把C++对象构造成一个XML文档然后把它写到磁盘或者另一个输出流中。 ...

    Python编程入门经典

    和DOM解析器 259 15.10.1 xml.sax 259 15.10.2 xml.dom.minidom 260 15.11 XSLT简介 262 15.11.1 XSLT是XML 262 15.11.2 转换和格式语言 263 15.11.3 函数式、模板驱动 263 15.12 lxml简介 263 15.13 元素类 263 ...

    php课程(共100多节)

    90:PHP DOM 创建生成多功能 XML文件 91:PHP修改和删除XML内容的原理和方法 92:在线支付接口之PHP支付宝接口开发 93:在线支付接口之PHP云网接口开发 94:SVN (Subversion) 配置与安装调试 95:SVN (Subversion) ...

    JavaScript王者归来part.1 总数2

     12.8.2 如何使用XML DOM--一个利用XML实现多级关联下拉选择框的例子   12.9 总结   第13章 事件处理  13.1 什么是事件   13.1.1 消息与事件响应   13.1.2 浏览器的事件驱动机制   13.2 基本事件处理  ...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程90:PHP DOM 创建生成多功能 XML文件 PHP100视频教程91:PHP修改和删除XML内容的原理和方法 PHP100视频教程92:在线支付接口之PHP支付宝接口开发 PHP100视频教程93:在线支付接口之PHP云网接口开发...

    PHP和MySQL Web开发第4版pdf以及源码

    6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的...

    PHP和MySQL Web开发第4版

    6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的...

    PHP和MySQL WEB开发(第4版)

    6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...

    精通qt4编程(源代码)

    于是,我们通过阅读Qt的assistant和examples来学习并使用Qt 4。在逐渐掌握Qt 4的过程中,我们萌发了编写一本关于Qt 4的书来帮助初学者入门的想法。最终,在电子工业出版社博文视点资讯有限公司的大力支持下,我们的...

    精通Qt4编程(第二版)源代码

    于是,我们通过阅读Qt的assistant和examples来学习并使用Qt 4。在逐渐掌握Qt 4的过程中,我们萌发了编写一本关于Qt 4的书来帮助初学者入门的想法。最终,在电子工业出版社博文视点资讯有限公司的大力支持下,我们的...

    vc++ 开发实例源码包

    实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...

    PHP手册2007整合中文版

    DOM XML Functions XXXIII. enchant Functions XXXIV. Error Handling and Logging Functions XXXV. Exif Functions XXXVI. Expect Functions XXXVII. File Alteration Monitor Functions XXXVIII. Forms Data ...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    再比如ASP.Net内置的AJAX解决方案UpdatePanel只在部分要求不高的内网项目中才被使用,因此我们在讲解UpdatePanel的使用和原理之外,把更多的时间放在讲解企业中用的最多的JQuery AJAX解决方案上。 6、B/S系统项目(7...

    vc++ 应用源码包_1

    实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...

    vc++ 应用源码包_2

    实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...

    vc++ 应用源码包_6

    实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...

Global site tag (gtag.js) - Google Analytics