码迷,mamicode.com
首页 > 其他好文 > 详细

XML系列:(7)XML解析-Dom4j的DOM解析方式更新XML

时间:2016-05-14 09:05:53      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:dom4j   xml   

Dom4j工具,是非官方的,不在jdk中。

使用步骤:

1)导入dom4j的核心包。 dom4j-1.6.1.jar

2)编写Dom4j读取xml文件的代码


1、更新XML


1.1、写出内容到xml文档

package com.rk.xml.g_dom4j_write;

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 第一个写出内容到xml文档
 * @author RK
 *
 */
public class Demo01
{
	public static void main(String[] args) throws Exception
	{
		//一、读取或创建一个Document对象
		Document doc = new SAXReader().read(new File("./src/animals.xml"));
		
		//二、修改Document对象内容
		
		//三、把修改后的Document对象写出到xml文档中
		//指定文件输出的位置
		FileOutputStream outStream = new FileOutputStream("D:/rk/result.xml");
		//1.创建写出对象
		XMLWriter writer = new XMLWriter(outStream);
		//2.写出Document对象
		writer.write(doc);
		//3.关闭流
		writer.close();
		System.out.println("执行结束!");
	}
}


1.2、写出内容到xml文档的细节

package com.rk.xml.g_dom4j_write;

import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 讨论写出内容到xml文档的细节
 * @author RK
 *
 */
public class Demo02
{
	public static void main(String[] args) throws Exception
	{
		Document doc = new SAXReader().read(new File("./src/animals2.xml"));
		
		/**
		 * 1.指定写出的格式
		 */
//		OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式.去除空格换行.项目上线的时候
		OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式.有空格和换行.开发调试的时候
		/**
		 * 2.指定生成的xml文档的编码
		 *    同时影响了xml文档保存时的编码  和  xml文档声明的encoding的编码(xml解析时的编码)
		 *    结论: 使用该方法生成的xml文档避免中文乱码问题。
		 */
		format.setEncoding("UTF-8");
		
		//指定文件输出的位置
		FileOutputStream outStream = new FileOutputStream("D:/rk/result.xml");
		//1.创建写出对象
		XMLWriter writer = new XMLWriter(outStream, format);
		//2.写出Document对象
		writer.write(doc);
		//3.关闭流
		writer.close();
		System.out.println("执行结束!");
	}
}



1.3、修改xml内容:添加、修改、删除

package com.rk.xml.g_dom4j_write;

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import org.dom4j.Element;
import org.dom4j.Attribute;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;
import org.junit.Test;

/**
 * 修改xml内容
 * 增加:文档,标签 ,属性
 * 修改:属性值,文本
 * 删除:标签,属性
 * @author RK
 *
 */
public class Demo03
{
	/**
	 * 增加:文档,标签 ,属性
	 */
	@Test
	public void testAdd() throws Exception
	{
		//1.创建文档
		Document doc = DocumentHelper.createDocument();
		
		//2.增加标签
		Element rootElement = doc.addElement("ContactList");
		Element contactElement = rootElement.addElement("Contact");
		Element nameElement = contactElement.addElement("Name");
		nameElement.setText("小明");
		
		//3.增加属性
		contactElement.addAttribute("id", "c001");
		contactElement.addAttribute("region", "北京");
		
		//把修改后的Document对象写出到xml文档中
		FileOutputStream out = new FileOutputStream("D:/rk/contact.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
		System.out.println("执行结束!");
	}

	/**
	 * 修改:属性值,文本
	 */
	@Test
	public void testModify() throws Exception
	{
		Document doc = new SAXReader().read(new File("./src/animals.xml"));
		/**
		 * 方案一: 修改属性值   1.得到标签对象 2.得到属性对象 3.修改属性值
		 */
		//1.1  得到标签对象
		Element catElement = doc.getRootElement().element("Cat");
		//1.2 得到属性对象
		Attribute catAttr = catElement.attribute("id");
		//1.3 修改属性值
		catAttr.setValue("c100");
		
		/**
		 * 方案二: 修改属性值
		 */
		//2.1  得到标签对象
		Element dogElement = doc.getRootElement().element("Dog");
		//2.2 通过增加同名属性的方法,修改属性值
		dogElement.addAttribute("id", "d100");
		
		/**
		 * 修改文本 1.得到标签对象 2.修改文本
		 */
		Element nameElement = doc.getRootElement().element("Cat").element("Home");
		nameElement.setText("第六宇宙");
		
		FileOutputStream out = new FileOutputStream("D:/rk/Animals.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
		System.out.println("执行结束!");
	}

	/**
	 * 删除:标签,属性
	 */
	@Test
	public void testDelete() throws Exception
	{
		Document doc = new SAXReader().read(new File("./src/animals.xml"));
		/**
		 * 1.删除标签     1.1 得到标签对象  1.2 删除标签对象    
		 */
		// 1.1 得到标签对象
		Element nameElement = doc.getRootElement().element("Cat").element("Home");
		//1.2 删除标签对象
		nameElement.detach();
//		nameElement.getParent().remove(nameElement);
		
		/**
		 * 2.删除属性   2.1得到属性对象  2.2 删除属性
		 */
		Element catElement = doc.getRootElement().element("Cat");
		//2.1得到属性对象
		Attribute idAttr = catElement.attribute("id");
		//2.2 删除属性
		idAttr.detach();
//		idAttr.getParent().remove(idAttr);
		
		FileOutputStream out = new FileOutputStream("D:/rk/animals.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
		System.out.println("执行结束!");
	}
}



2、思维导图

技术分享




XML系列:(7)XML解析-Dom4j的DOM解析方式更新XML

标签:dom4j   xml   

原文地址:http://lsieun.blog.51cto.com/9210464/1773221

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!