`
lzth
  • 浏览: 138732 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dom4j写xml范例

    博客分类:
  • Java
阅读更多
package com.xskj;

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

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

public class DOM4JTest {

 /**
     * DOM4J读写XML
     * 
     * @param Admin
     * @throws Exception
     */
    public static void main(String[] args) {
        try {
            XMLWriter writer = null;// 声明写XML的对象
            SAXReader reader = new SAXReader();

            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");// 设置XML文件的编码格式

            String filePath = "d:\\student.xml";
            File file = new File(filePath);
            if (file.exists()) {
                Document document = reader.read(file);// 读取XML文件
                Element root = document.getRootElement();// 得到根节点
                boolean bl = false;
                for (Iterator i = root.elementIterator("student"); i.hasNext();) {
                    Element student = (Element) i.next();
                    if (student.attributeValue("sid").equals("001")) {
                        // 修改学生sid=001的学生信息
                        student.selectSingleNode("name").setText("wangw");
                        student.selectSingleNode("age").setText("25");

                        writer = new XMLWriter(new FileWriter(filePath), format);
                        writer.write(document);
                        writer.close();
                        bl = true;
                        break;
                    }
                }
                if (bl) {
                    // 添加一个学生信息
                    Element student = root.addElement("student");
                    student.addAttribute("sid", "100");
                  
                    Element sid = student.addElement("no");
                    sid.setText("100");
               
                    Element name = student.addElement("name");
                    name.setText("xiaof");
                
                    Element sex = student.addElement("sex");
                    sex.setText("boy");
                
                    Element age = student.addElement("age");
                    age.setText("29");

                    writer = new XMLWriter(new FileWriter(filePath), format);
                    writer.write(document);
                    writer.close();
                }
            } else {
                // 新建student.xml文件并新增内容
                Document _document = DocumentHelper.createDocument();
                Element _root = _document.addElement("studentinfo");
                Element _student = _root.addElement("student");
           
                _student.addAttribute("sid", "001");
                Element _id = _student.addElement("no");
              
                _id.setText("001");
                Element _name = _student.addElement("name");
             
                _name.setText("xiaoli");
                Element _age = _student.addElement("age");
                _age.setText("28");

                writer = new XMLWriter(new FileWriter(file), format);
                writer.write(_document);
                writer.close();
            }
            System.out.println("操作结束! ");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}


执行结果应该是这样:

循环解析节点:
private void getAllNodes(String xml) {
        try {
            Document authtmp = DocumentHelper.parseText(xml);
            List<Element> list = authtmp.selectNodes("//sms/node");
            for (int j = 0; j < list.size(); j++) {
                Element node = (Element) list.get(j);
                nodeByNodes(node);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void nodeByNodes(Element node) {
        if (node.element("node") != null) {
            String id = node.attributue("id");
            String name = node.attributue("name");
            System.out.print(id + "-------");
            System.out.println(name);
            for (Iterator i = node.elementIterator("node"); i.hasNext();) {
                Element newNode = (Element) i.next();
                nodeByNodes(newNode);
            }
        } else {
            String id = node.attributue("id");
            String name = node.attributue("name");
            System.out.print(id + "-------");
            System.out.println(name);
        }
    }


其次DOM4J的解释

一.Document对象相关

1.读取XML文件,获得document对象.
      SAXReader reader = new SAXReader();
      Document   document = reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
      String text = "<members></members>";
      Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
      Document document = DocumentHelper.createDocument();
      Element root = document.addElement("members");// 创建根节点
二.节点相关

1.获取文档的根节点.
     Element rootElm = document.getRootElement();
2.取得某节点的单个子节点.
     Element memberElm=root.element("member");// "member"是节点名
3.取得节点的文字
     String text=memberElm.getText();也可以用:
     String text=root.elementText("name");这个是取得根节点下的name字节点的文字.

4.取得某节点下名为"member"的所有字节点并进行遍历.
List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {
    Element elm = (Element) it.next();
   // do something
}


5.对某节点下的所有子节点进行遍历.
 for(Iterator it=root.elementIterator();it.hasNext();){
                 Element element = (Element) it.next();
                // do something
             }

6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");

7.设置节点文字.
ageElm.setText("29");

8.删除某节点.
parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点

9.添加一个CDATA节点.
Element contentElm = infoElm.addElement("content");
         contentElm.addCDATA(diary.getContent());
            contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
            contentElm.clearContent(); //清除节点中的内容,CDATA亦可

三.属性相关.
1.取得某节点下的某属性
Element root=document.getRootElement();   
             Attribute attribute=root.attribute("size");// 属性名name
            
2.取得属性的文字
             String text=attribute.getText();也可以用:
String text2=root.element("name").attributue("firstname");这个是取得根节点下name字节点的属性 firstname的值.

3.遍历某节点的所有属性
 Element root=document.getRootElement();   
            for(Iterator it=root.attributeIterator();it.hasNext();){
                 Attribute attribute = (Attribute) it.next();
                 String text=attribute.getText();
                 System.out.println(text);
             }


4.设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
5.设置属性的文字
             Attribute attribute=root.attribute("name");
             attribute.setText("sitinspring");
6.删除某属性
             Attribute attribute=root.attribute("size");// 属性名name
             root.remove(attribute);
四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.
             OutputFormat format = OutputFormat.createPrettyPrint();
             format.setEncoding("GBK");    // 指定XML编码      
             XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
          
             writer.write(document);
             writer.close();
五.字符串与XML的转换
1.将字符串转化为XML
String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);
2.将文档或节点的XML转化为字符串.
             SAXReader reader = new SAXReader();
             Document   document = reader.read(new File("input.xml"));          
             Element root=document.getRootElement();              
             String docXmlText=document.asXML();
             String rootXmlText=root.asXML();
             Element memberElm=root.element("member");
             String memberXmlText=memberElm.asXML();
分享到:
评论

相关推荐

    java 通过dom4j操作 xml

    java 通过dom4j操作 xml,含范例和源码

    dom和sax读XML源码范例

    用dom 和 sax 读XML文件,简单明了

    经典的DOM解析XML范例

    用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)...

    DOM SAX解析XML文档的范例(工程包)

    这是一个建立好了的工程,非常简易,大家可以看下

    《JavaScript+DHTML语法与范例详解词典》源码

    XMLDOM的相关知识,以及如何通过JavaScript XML DOM对象来读取XML文件的数据,并添加、修改、删除XML文件元素。同时,《JavaScript+DHTML语法与范例详解词典》还讲解AJAX技术的用法,AJAX的定义、语法、功能和执行...

    XML编程从入门到精通

    模式和XML DR 名域机制本篇附有3 个实例第二篇 XML 与数据介绍DOM 进阶DOM 应 用实例包括投票系统留言本网址及短消息管理器SAX 进阶XML 与数据并提供了7 个 实例第三篇 XML 工业应用主要内容是WML 无线应用协议SMIL ...

    各种方法解析XML

    dom4j,jdom生成和解析XML文档实例,使用基于事件的SAX解析XML文档实例,使用jquery,javascript动态的生成DOM实例,使用jquery,javascript解析ajax回传的XML文档实例,jquery,javascript的ajax技术使用实例,Xpath的...

    用XML轻松开发WEB站点

    第三部分(XML的实践),内容包括:创建XML文档,创建属于自己的DTD,内容与形式的结合——XSL,XML DOM技术,同步多媒体合成语言SMIL,ASP与XML的联合开发; 第四部分(XML高阶),内容包括:XML在数据库中的...

    xml基础教程

    《XML 基础教程》系统地阐述了XML的基本概念和语法规则,介绍了如何用DTD与XML Schema来确保XML文档的有效性,讲述了使用CSS与XSL样式表来显示和转换XML文档的各个步骤,探讨了使用DSO与DOM访问XML文档的各种方法。...

    《XML编程从入门到精通 》[PDF]

    第二篇XML与数据,介绍DOM进阶、DOM应用实例(包括投票系统、留言本、网址及短消息管理器)、SAX进阶、XML与数据。并提供了7个实例;第三篇XML工业应用,主要内容是WML(无线应用协议)、SML(同步多媒体集成语言)、XML与...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

     好了,通过第三章的学习,我们已经了解了一些XML和DTD的基本术语,但是我们还不知道怎样来写这些文件,需要遵循什么样的语法,在下一章,将重点介绍有关撰写XML和DTD文档的语法。 第四章 XML语法 七.DTD的语法...

    xml编程从入门到精通

    资源名称:XML编程从入门到精通内容简介:这是一本通过12个典型范例介绍XML编程从入门到精通的专著。 全书由3篇,12章组成,主要内容包括:第一篇XML提高,介绍数据建模、DTD模式、XML模式和XML DR、名域机制。本篇...

    XML高级编程

    这四章对于读者开始XML应用程序的编程来说已经足够了。当你读完它们之后,你将理解XML是什么,如何筹划它的结构,如何用代码操作XML文档。虽然XML技巧资源已经相当丰富,但你仍需要首先打好坚实的基础。所以关键的...

    用XML轻松开发WEB站点(PDF)

    第三部分(XML的实践),内容包括:创建XML文档,创建属于自己的DTD,内容与形式的结合——XSL,XML DOM技术,同步多媒体合成语言SMIL,ASP与XML的联合开发; 第四部分(XML高阶),内容包括:XML在数据库中的应用,XML...

    ASP.NET/XML深入编程技术

    全书由12章构成,内容包括.NET平台的建立、ASP.NET的Web Forms、控件、数据访问、Web Service、ASP.NET的设置和跟踪、ASP.NET的安全、ASP.NET的缓冲机制等技术,对于XML,书中则详细地介绍了XML的语法与应用...

Global site tag (gtag.js) - Google Analytics