前端之家收集整理的这篇文章主要介绍了
XML解析-Dom4j的DOM解析方式更新XML,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Dom4j工具,是非官方的,不在jdk中。
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar
2)编写Dom4j读取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、思维导图