`

入门:用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)

    本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...

    dom4j入门资料全.rar

    5. **文档构建**:通过DOM4J,可以动态构建XML文档,这对于动态生成XML数据非常有用。 6. **Java集合框架集成**:DOM4J的元素和属性都可以视为Java集合,可以使用Java的迭代器和集合方法进行操作,这大大增强了其可...

    我写的几个dom4j的入门例子.rar

    - `books.xml`、`sql.xml`、`data.xml`、`xml002.xml`和`xml003.xml`这些文件很可能是包含不同结构的XML文档,用于演示DOM4J如何解析XML内容。例如,`books.xml`可能是一个图书目录,包含书名、作者等信息。DOM4J...

    DOM解析XML应用实例(入门经典案例)

    本教程“DOM解析XML应用实例(入门经典案例)”旨在帮助初学者快速掌握DOM解析XML的基本方法和实践技巧。 XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据,特别是在Web应用程序中。它具有...

    dom4j 英文api和htmldom教程下载

    - **解析XML**:使用DOM4J提供的`DocumentFactory`创建`Document`对象,然后用`SAXReader`读取XML文件。 - **操作XML**:利用`Element`、`Attribute`等类,可以查找、修改或添加XML元素和属性。XPath查询可通过`...

    dom4j基础入门文档(SAX,DOM,XPATH)

    总结,dom4j是一个强大且灵活的XML处理库,提供了丰富的API来读取、操作和生成XML文档。通过利用XPath的支持,可以高效地定位和提取XML数据,极大地简化了XML编程。在实际开发中,根据项目需求选择合适的解析器...

    dom4j-1.6.1.zip

    这个版本的DOM4J提供了一系列API,使得开发者能够方便地读取、写入、修改以及解析XML文件。下面我们将深入探讨DOM4J的核心功能和使用方法。 XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、...

    DOM4j教程 例子

    DOM4j是一种用于处理XML的Java API,其设计目的是提供一个高效、功能丰富且易于使用的API。DOM4j是一个开源项目,可以在SourceForge等开源平台上获取到。DOM4j不仅在性能上表现出色,在功能性和易用性方面也得到了...

    dom4j 完整jar包 及 帮助文档

    **四、DOM4J与SAX和DOM的比较** 1. **DOM4J vs DOM**:DOM4J比DOM更轻量级,内存占用小,且提供了更丰富的API。 2. **DOM4J vs SAX**:DOM4J结合了SAX的事件驱动和DOM的便利性,可以在内存中保留整个文档结构,同时...

    xmlbean入门实例

    - 加载XML文档:使用`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`解析XML文件,得到`Document`对象。 - 创建Java对象:使用XMLBean生成的类,通过构造函数实例化对象。 - 将XML数据绑定到Java...

    XML读取解析,(初学者)

    1. 使用DOM解析: - 引入`javax.xml.parsers`包下的`DocumentBuilderFactory`和`DocumentBuilder`类,创建解析器实例,然后调用`parse()`方法加载XML文件。 - 解析后的XML文档可以通过`Document`对象进行遍历,如`...

    《C# XML 入门经典》源代码

    1. **XML文档的创建**:如何使用C#动态生成XML文档,包括添加元素、属性和文本内容。 2. **XML的加载和解析**:通过XmlReader、XmlTextReader或XDocument等类加载XML文件,然后解析成内存中的对象结构。 3. **XML...

    开源框架《web+dom4j专题》

    3. **XML与dom4j**:深入学习XML语法,掌握dom4j的基本用法,包括创建、读取和修改XML文档,以及使用XPath进行查询。 4. **实战项目**:通过实际项目练习,将Web开发与dom4j结合,如构建一个处理XML请求和响应的简单...

    XML初学入门教程(pdf)

    根据提供的信息,我们可以详细地解析每个章节所涉及的知识点,并为初学者提供一个全面的XML入门指南。 ### 第一章:在学习XML之前你应该掌握什么 在深入学习XML之前,了解以下基础知识对于理解XML的概念及其应用至...

    XML支持库入门教程.rar

    下面我们将深入探讨XML的基本概念、XML文档结构、解析和生成XML的方法,以及易语言中的XML支持库。 1. XML基本概念: - XML是一种可扩展的标记语言,与HTML类似,但更加灵活和规范。 - XML的目的是传输和存储数据...

    XML.rar(里面两本书:XML编程从入门到精通.pdf--xml_基础学习完全手册.chm)都是【高清晰】

    9. **DOM和JDOM**:在Java编程中,DOM4J和JDOM是常用的XML处理库,它们提供了操作XML文档的API,简化了XML的解析和生成。 10. **XML与数据库**:XML也可以作为数据库中的数据格式,如XML数据库,提供了一种非结构化...

    XML基础入门和简易教程

    2. **微型数据库**:XML可作为轻量级的数据库,使用DOM(Document Object Model)等API进行数据的读写和查询,常见于小型应用程序或留言板系统。 3. **通信数据**:在Web服务中,XML作为数据交换格式,使得不同系统...

    XML入门及提高(很详细的)

    XML的结构清晰,易于机器解析和生成,也适合人工阅读。 XML的基础概念: 1. **元素(Element)**:XML文档的核心组成部分,用于定义数据结构。每个元素由起始标签和结束标签组成,如`&lt;element&gt;`和`&lt;/element&gt;`,...

Global site tag (gtag.js) - Google Analytics