XML系列:(7)XML解析-Dom4j的DOM解析方式更新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、思维导图

时间: 2024-08-06 03:40:14

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

XML系列:(6)XML解析-Dom4j的DOM解析方式读取XML

Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 animals.xml <?xml version="1.0" encoding="UTF-8"?> <Animals> <Cat id="c001" name="喵喵"> <Home>火星</Home> <

xml解析-jaxp之dom解析

package day06_parser.dom; /** * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写, * 中文含义是:用于XML文档处理的使用Java语言编写的编程接口.JAXP支持DOM.SAX.XSLT等标准. * 下面我们研究两种解析方式: * 1.dom解析 2.sax解析:Simple API for XML * 下面是dom解析的实例. * JAXP-DOM解析实例: * 下面的实例实现的功能是,通过javax.xml包实

XML系列:(4)XML解析-JAXP的DOM解析方式读取XML

DOM.SAX和StAX只是解析方式,没有API. JAXP是SUN提供的一套XML解析API.    JAXP(Java API for XMLProcessing,意为XML处理的Java API) JAXP很好的支持DOM和SAX解析. JAXP开发包是JAVASE的一部分,它由java.xml.org.w3c.dom.org.xml.sax包及其子包组成 products.mxl <?xml version="1.0" encoding="UTF-8"

XML系列:(5)XML解析-JAXP的DOM解析方式修改XML

DOM.SAX和StAX只是解析方式,没有API. JAXP是SUN提供的一套XML解析API.JAXP(Java API for XMLProcessing,意为XML处理的Java API) JAXP很好的支持DOM和SAX解析. JAXP开发包是JAVASE的一部分,它由java.xml.org.w3c.dom.org.xml.sax包及其子包组成 1.以DOM解析方式修改XML 1.1.将Document树保存到文件中 package com.rk.xml.e_jaxp_dom_writ

[ java 工具类] xml字符串解析成Map(DOM解析)

package com.tencent.jungle.wechat.util; import com.google.inject.Singleton; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.

java使用dom读取,更新xml文件

package com.sun.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import javax.xml.parsers.Docu

XML系列:(3)XML解析

xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容,这叫做xml解析. 1.XML解析方式和工具 1.1.XML解析方式 XML解析分为两种方式:DOM和SAX. DOM:W3C组织推荐的一种解析方式.xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容.缺点: 不适合读取大容量的xml文件,容易导致内存溢出. SAX:(Simple API for XM

JavaWeb-05 XML基础(Dom解析和Sax解析)

JavaWeb-05 JavaWeb-XML基础(Dom解析和Sax解析) 一.XML的概述(了解) eXtensible Markup Language 可扩展标记语言 宗旨是传输数据,而非显示数据. XML标签没有被预定义,需要用户自行定义标签. XML技术是W3C组织(WorldWideWeConsortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范. 作用: a. 传输数据 b. 配置文件(主要用途) XML技术用于解决什么问题? a. XML语言出现

Java:简单的解析XML文件之使用DOM解析

XML简介 要理解XML,HTML等格式,先来理解文档对象模型DOM 根据 DOM,HTML 文档中的每个成分都是一个节点,这些节点组成了一棵树.DOM 是这样规定的:整个文档是一个文档节点每个 HTML 标签是一个元素节点包含在 HTML 元素中的文本是文本节点每一个 HTML 属性是一个属性节点注释属于注释节点 节点彼此都有等级关系.HTML 文档中的所有节点组成了一个文档树(或节点树).HTML 文档中的每个元素.属性.文本等都代表着树中的一个节点.树起始于文档节点,并由此继续伸出枝条,直