DOM4j 操作XML

<?xml version="1.0" encoding="GBK"?>
<persons>
    <men>
        <person id = "20111907">潘腾</person>
        <person id = "20111901">雷帅</person>
    </men>
    <women>
        <person id = "20111908">杨悦</person>
        <person id = "20111908">张东月</person>
    </women>
</persons>
import java.io.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import org.dom4j.*;
import org.dom4j.io.*;
import java.util.*;
import org.jaxen.*;
public class DOM_XML {
    public static void main(String[] args)
    {
        try
        {
//            read_xml1();
//            read_xml2();
//            read_xml3();
//            read_xml4();
//            creatXml();
            modifyXML();
        }
        catch(Exception e)
        {
            System.out.println("错误信息:" + e);
        }
    }

    /**
     * 第一种方式 使用迭代器读XML
     */
    public static void read_xml1()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
            Iterator it = root.elementIterator();                    //<men>   <women>
            while(it.hasNext())
            {
                Element ele = (Element)it.next();
                Iterator sec_it = ele.elementIterator();
                while(sec_it.hasNext())
                {
                    Element man = (Element)sec_it.next();      //不调用next方法,就不会下移  便会产生死循环
                    String name = man.getName();
                    String attr = man.attributeValue("id");
                    String content = man.getText();
                    System.out.println("name:" + name + "\nid: " + attr + "\nContent: " + content);
                }
            }
        }
        catch(Exception e)
        {

        }
    }

    /**
     * 第二种方式 elements
     */
    public static void read_xml2()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
            List<Element> listEle = root.elements("men");            //获取root下的所有men元素
             List<Element> listMen = listEle.get(0).elements("person");        //获取men下的所有person元素
             for(Element element_obj:listMen)
             {
                String name = element_obj.getName();
                String attr = element_obj.attributeValue("id");
                String content = element_obj.getText();
                System.out.println("name:" + name + "\nid: " + attr + "\nContent: " + content);
             }
        }
        catch(Exception e)
        {

        }
    }

    /**
     * 第三种方式  使用适配器  这个暂时没有搞懂
     */
    public static void read_xml3()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>

             //第三种方式 适配器
             doc.accept(new VisitorSupport() {//使用观察器的子类,来完成对xml文件的读取。

                   public void visit(Element el) {//利用观察期进行xml的读取。

                    System.out.println(el.getName()+": "+el.getText());
                   }

                  });
        }
        catch(Exception e)
        {

        }

    }

    /**
     * 第四种方式 selectNodes
     * selectNodes的参数是元素路径  需要学习XPath相关知识
     */
    public static void read_xml4()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>

            //第四种 使用selectNodes读取XML
            //需要导入 org.jaxen.* 包   否则会报错
            List list = doc.selectNodes("//persons/men/person");//使用selectNodes获取所要查询xml的节点。
             for(Object obj:list){//遍历节点,获取节点内数据。
                   Element el = (Element)obj;
                   System.out.println(el.getText());
                  }
        }
        catch(Exception e)
        {}
    }

    /**
     * 创建XML文件
     * XML文件第一行 encoding值为UTF-8   这是错误的
     * java 在windows 中文版环境下 默认采用的是GBK,所以需要手动更改
     */
    public static void creatXml()
    {
        try
        {
            Document newdoc = DocumentHelper.createDocument();
            Element persons = newdoc.addElement("persons");
            Element men = persons.addElement("men");
            Element person1 = men.addElement("person");
            person1.addAttribute("id", "20111907");
            person1.setText("panteng");
            Element person2 = men.addElement("person");
            person2.addAttribute("id", "20111901");
            person2.setText("leishuai");

            File newxml = new File("newFile.xml");
            if(newxml.exists())
            {
                newxml.delete();
            }
            newxml.createNewFile();    //创建文件
            XMLWriter out = new XMLWriter(new FileWriter(newxml));
            out.write(newdoc);
            out.flush();
            out.close();
            System.out.println("文件创建完毕");
        }
        catch(Exception e)
        {

        }
    }

    /**
     * 修改XML   删除节点、修改 添加属性
     */
    public static void modifyXML()
    {
        try
        {
            SAXReader reader = new SAXReader();                        //解析器
            Document doc = reader.read(new File("persons.xml"));    //文档对象
            Element root = doc.getRootElement();                    //获取根元素  <persons>
            Element men = root.element("men");
            //删除雷帅的记录元素
            Iterator it = men.elementIterator();
            while(it.hasNext())
            {
                Element ele = (Element)it.next();
                if(ele.getText().equals("雷帅"))
                {
                    men.remove(ele);
                }
            }
            //增加伟男记录
            Element weiNan = men.addElement("person");
            weiNan.setText("伟男");

            //修改 潘腾的id 并增加age属性
            Iterator it2 = men.elementIterator();
            while(it2.hasNext())
            {
                Element ele = (Element)it2.next();
                if(ele.getText().equals("潘腾"))
                {
                    ele.setAttributeValue("id", "080635");
                    ele.addAttribute("age", "23");
                }
            }

            File newxml = new File("newFile.xml");
            if(newxml.exists())
            {
                newxml.delete();
            }
            newxml.createNewFile();    //创建文件
            XMLWriter out = new XMLWriter(new FileWriter(newxml));
            out.write(doc);
            out.flush();
            out.close();
            System.out.println("文件更新完毕");
        }
        catch(Exception e)
        {
            System.out.println("错误信息:" + e);
        }

    }
}

不难看出,JAVA  对xml的修改,实际上是修改了doc对象,然后删除原来的文件,将这个对象 重新写入一个文件,文件名和原先的相同。

时间: 2024-10-23 14:31:36

DOM4j 操作XML的相关文章

Dom4j操作xml

boolean flag = budgetCommon.createFolderFile("C:\\mfmis\\DefaulSetting\\DefaulBudgetorginConfig.xml");//"+format.format(new Date())+" if(flag){//若返回为true,则代表此目录下的文件不存在,为第一次创建 budgetCommon.saveDefaulXML(defaulSettingForm,defaulSettingDi

使用dom4j操作xml文件的增删改

package day2.domx; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;

使用Dom4j操作XML数据

--------------siwuxie095 dom4j 是一个非常优秀的 Java XML 的 API, 用来读写 XML 文件 和操作 XML 数据 特点:性能优异.功能强大.极端易用 dom4j 的下载链接:http://www.dom4j.org/dom4j-1.6.1/ 将 dom4j-1.6.1.zip 解压一览: 工程名:TestDom4j 包名:com.siwuxie095.dom4j 类名:Test.java 打开资源管理器,在工程 TestDom4j 文件夹下,创建一个

Strus2第一次课:dom4j操作xml

先从底层的xml操作技术记录: 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; 并且提供了 javax.xml来读取xml.对xml进行增删改操作 如何读取一个xml文件: 导包: javax.xml.parsers

XML学习笔记(2)--dom4j操作XML

1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象

dom4j操作xml对象

// 获取Documen对象 public static Document getDocument(String path) throws Exception{ // 解析器对象 SAXReader reader = new SAXReader(); // 解析 return reader.read(path); } // 回写(XMLWriter) public static void writeXml(Document document,String path) throws Excepti

dom4j操作xml的demo

package com.cn.shop.util; import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.util.Iterator;import java.util.List; import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;i

java使用dom4j操作XML增删改查-超简洁

一.前言 1.使用工具:eclipse    环境:JDK-11 2.类说明:共四个类:Zen   |  Shan  |   Gai   |   Cha   (一个类只做一件事,简单明了) 3.引用jar包:dom4j-1.6.1.jar 4.反馈方式:邮箱 [email protected] 5.使用的源XML名为:Humen.xml  内容如下 二.源码 1.在源XML基础上添加新的 节点.属性.文本内容 /** * 作者:向家康 * 版权所有 禁止转发 */package 正式版.XML.

DOM4J操作XML(包括封装和解析)

先来看看dom4j中相应XML的DOM树建立的继承关系 针对于XML标准定义.相应于图2-1列出的内容,dom4j提供了下面实现: 以下给出一个详细事例: package com.iboxpay.settlement.gateway.common.util; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import org.dom4j.Document; import