`
lzth
  • 浏览: 142332 次
  • 性别: 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();
分享到:
评论

相关推荐

    经典的DOM解析XML范例

    【DOM解析XML】 在Java中,解析XML文档有多种方式,其中DOM(Document Object Model)和SAX(Simple API for XML)是最常见的两种。DOM是一种基于树形结构的XML处理方式,它将整个XML文档加载到内存中,形成一个完整...

    dom和sax读XML源码范例

    处理XML文件时,我们通常会使用两种主要的方法:DOM(Document Object Model)和SAX(Simple API for XML)。本文将深入探讨这两种解析方式,并通过代码示例来阐述它们的工作原理。 DOM解析是将整个XML文档加载到...

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

    本工程包“DOM SAX解析XML文档的范例”将帮助我们深入理解这两种解析方式。 **DOM解析:** DOM解析器将整个XML文档加载到内存中,创建一个树形结构,称为DOM树。每个XML元素、属性、文本节点等都有对应的DOM对象,...

    XML DOM教程

    **XML DOM 教程** XML(可扩展标记语言)是一种用于存储和传输数据的标准化格式,而DOM(文档对象模型)是W3C组织定义的一个接口,它为XML和HTML文档提供了一种结构化的表示方法,并允许编程语言如JavaScript与这些...

    XML 精要 范例 解析封装类库

    例如,Java中的JAXB(Java Architecture for XML Binding)用于对象与XML之间的绑定,DOM4J提供DOM接口的增强,而Python的xml.etree.ElementTree是内置的XML处理模块。这些类库简化了XML处理,使得开发者无需关注...

    (这是随书附赠的光盘)HTML+XHTML+CSS+JavaScript+DOM+AJAX语法及范例实用辞典附赠光盘

    在《HTML+XHTML+CSS+JavaScript+DOM+AJAX语法及范例实用辞典》这本书的附赠光盘中,包含了从"chapter1"到"chapter5"的全部网站源码,为读者提供了丰富的学习资源。 1. **HTML(HyperText Markup Language)**:HTML...

    mfcxml文件

    HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument), (LPVOID*)&pDoc); if (FAILED(hr)) { // 错误处理... } BSTR bstrPath = SysAllocString(L"your_...

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

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

    C2的特效范例(XML格式)

    本压缩包中的“C2的特效范例(XML格式)”提供了C2引擎专用的特效文件,这些文件采用XML格式,可以被C2引擎识别和执行,同时也能应用于基于JavaScript的网页游戏代码中。 XML(Extensible Markup Language)是一种...

    XML实践例子.zip

    总结来说,这个压缩包提供了一个全面的XML学习环境,涵盖了从基本的XML结构到DOM解析,再到XSLT转换的各个方面。通过这些实例,学习者可以深入理解XML的工作原理,以及如何利用XML进行数据管理和交换。对于初学者和...

    这是一本通过12个典型例子 范例介绍XML编程从入门到精通的

    4. **XML Schema**:与DTD相比,XML Schema提供了更强大的数据类型和更复杂的结构约束。它使用XSD(XML Schema Definition)文件来定义文档结构。 5. **命名空间(Namespaces)**:在XML中,命名空间可以防止元素...

    Labview_Parse_XML_Data-master.rar

    - **范例VI**:演示如何加载XML文件、解析数据并显示结果的完整流程。 - **XML解析例程**:自定义的LabVIEW函数,可能是为了简化XML处理或增加特定功能。 - **文档**:解释如何使用提供的代码和资源,以及解析XML...

    XML基础教程与实验指导课件PPT+源代码文件。

    4. 使用DOM或SAX解析XML文件,并提取所需信息。 本教程的PPT课件将详细讲解这些知识点,源代码文件则提供了实践示例,帮助你加深理解并提升XML的应用能力。通过学习,你将能够熟练地运用XML进行数据的组织、存储和...

    各种方法解析XML

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

    Qt编程范例之中高级篇(4)之XML相关部分(附源码)

    在本篇Qt编程范例之中高级篇(4)中,我们将深入探讨XML处理技术,这是在C++开发中,特别是使用Qt框架时一个非常重要的部分。XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,因其灵活性和跨...

    基于XML的通讯录

    为了更好地练习XML,向服务器接收到参数后,均用DOM的方式存入XML,数据的读取均用Xpath读取。然后以XML文件的形式返回。以下均已用户注册为例,来说明数据的处理: 1. 用户点击注册按钮,就会把系统生成的ID和用户...

    XML+Web+Services高级编程范例

    1. **XML基础**:了解XML的基本结构,包括元素、属性、文本内容、命名空间等,并学习如何使用DOM(Document Object Model)、SAX(Simple API for XML)和LINQ to XML等方法来解析和生成XML文档。 2. **XPath和XSLT...

    用XML轻松开发WEB站点

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

    《轻松搞定XML》的范例源代码和学习笔记

    源代码部分则可能包含XML解析、DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析方式的示例。DOM将整个XML文档加载到内存,形成一棵可操作的节点树;SAX是事件驱动...

Global site tag (gtag.js) - Google Analytics