Dom4j:Writing a document to a file

import java.io.File;
import java.io.FileOutputStream; import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo1 {
public static void main(String[] args) throws Exception {
Document doc =new SAXReader().read("./src/contact.xml");
FileOutputStream output = new FileOutputStream(new File("F:\\a.xml")); XMLWriter writer = new XMLWriter(output); writer.write(doc);
output.close();
}
}
//没有空格换行
OutputFormat format = new OutputFormat().createCompactFormat();//不给人看用这种,产品上线时,内容小
//有空格换行
OutputFormat format1 = new OutputFormat().createPrettyPrint();//给人看用这种,调试的时候
//(空格也是内容)
//指定xml文档的编码
format.setEncoding("utf-8");

同时影响了xml文档保存时的编码  和  xml文档声明的encoding的编码(xml解析时的编码)

结论: 使用该方法生成的xml文档避免中文乱码问题。

import java.io.File;
import java.io.FileOutputStream; import org.dom4j.Attribute;
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;
import org.junit.jupiter.api.Test; /*
* 修改xml内容
* 增加:文档,标签 ,属性
* 修改:属性值,文本
* 删除:标签,属性
*/
public class Demo3 {
/* @Test
public void Test() throws Exception {
//创建新文档
Document doc = DocumentHelper.createDocument();
//增加标签
Element rootelem = doc.addElement("contactList");
Element contactelem = rootelem.addElement("contact");
contactelem.addElement("name");
//增加属性
contactelem.addAttribute("dsa", "454");
contactelem.addAttribute("color", "red");
//修改xml的document对象 //把修改后的Document对象写出到xml文档中
FileOutputStream output = new FileOutputStream(new File("F:\\a.xml"));
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(output,format);
writer.write(doc);
output.close();
}*/
@Test
public void Test1() throws Exception {
//读入文件
Document doc =new SAXReader().read("./src/contact.xml"); /**
* 修改属性值
* 方法一
* 1.得到标签
* 2.得到属性对象
* 3.修改属性值
*/ //方法一
/*Element contacttelem = doc.getRootElement().element("contact");
Attribute idattribute = contacttelem.attribute("id");
idattribute.setValue("4564");*/ //方法二
/*Element contacttelem = doc.getRootElement().element("contact");
//通过增加同名属性方法覆盖原来属性
contacttelem.addAttribute("id", "4564564564");*/ /**
* 修改文本
* 1.得到标签
* 2.修改
*/ /*
Element nemeelem = doc.getRootElement().element("contact").element("name");
nemeelem.setText("李四");*/ //输出修改后的文件
OutputFormat format = OutputFormat.createPrettyPrint();
FileOutputStream output = new FileOutputStream(new File("F:\\a.xml"));
XMLWriter writer = new XMLWriter(output,format);
writer.write(doc);
output.close();
} @Test
public void Test2() throws Exception {
Document doc =new SAXReader().read("./src/contact.xml");
/**
* 删除标签
* 得到标签。删除标签。
*/
// Element ageelem = doc.getRootElement().element("contact").element("age");
//ageelem.detach();
//ageelem.getParent().remove(ageelem); /**
* 删除属性
* 得到属性对象。删除属性
*/
Element elem2 = (Element)doc.getRootElement().elements().get(1);
Attribute attr= elem2.attribute("id");
attr.detach();
//attr.getParent().remove(attr);
//输出修改后的文件
OutputFormat format = OutputFormat.createPrettyPrint();
FileOutputStream output = new FileOutputStream(new File("F:\\a.xml"));
XMLWriter writer = new XMLWriter(output,format);
writer.write(doc);
output.close();
}
}

作业:

<!--使用dom4j的api来生成以下的xml文件--!>
<Students>
<Student id="1">
<name>张三</name>
<gender>男</gender>
<grade>计算机1班</grade>
<address>广州天河</address>
</Student>
<Student id="2">
<name>李四</name>
<gender>女</gender>
<grade>计算机2班</grade>
<address>广州越秀</address>
</Student>
</Students>
修改id为2的学生的姓名,改为“王丽”
删除id为2的学生
import java.io.File;
import java.io.FileOutputStream;
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;
import org.junit.Test; public class Demo4 {
//写文件
@Test
public void test() throws Exception{
Document doc = DocumentHelper.createDocument(); Element rootelem = doc.addElement("students");
Element Elems1 = rootelem.addElement("student");
Elems1.addAttribute("id", "001");
Elems1.addElement("name").setText("李杰");
Elems1.addElement("gender").setText("男");
Elems1.addElement("grade").setText("计算机科学与技术班"); Element Elems2 = rootelem.addElement("student");
Elems2.addAttribute("id", "002");
Elems2.addElement("name").setText("李英");
Elems2.addElement("gender").setText("女");
Elems2.addElement("grade").setText("计算机科学与技术班"); FileOutputStream ouput = new FileOutputStream("F:\\c.xml");
OutputFormat format = new OutputFormat().createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer= new XMLWriter(ouput,format);
writer.write(doc);
writer.close();
}
//修改id为002的学生的名字为李汉三
@Test
public void test1() throws Exception{
Document doc = new SAXReader().read(new File("F:\\c.xml"));
Iterator<Element> it = doc.getRootElement().elementIterator("Student");
while(it.hasNext()){
Element stuElem = it.next();
if(stuElem.attributeValue("id").equals("002")){
stuElem.element("name").setText("李汉三");
break;
}
} FileOutputStream out = new FileOutputStream("F:\\c.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
}
//删除id为002的学生的名字标签
@Test
public void test2() throws Exception{
Document doc = new SAXReader().read(new File("F:\\c.xml"));
Iterator<Element> it = doc.getRootElement().elementIterator("Student");
while(it.hasNext()){
Element stuElem = it.next();
if(stuElem.attributeValue("id").equals("002")){
stuElem.detach();
break;
}
}
FileOutputStream out = new FileOutputStream("F:\\c.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
}
}

Day 26:Dom4j修改xml的更多相关文章

  1. 用dom4j修改xml(增加修改节点)

    用dom4j修改xml(增加修改节点) 博客分类: Java XMLJavaMyeclipseServlet  使用dom4j修改解析xml,xml文件的位置是配置在xml.properties文件中 ...

  2. Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)

    1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大 ...

  3. Dom4j修改xml文档引入

    前面介绍了如何解析xnl文档的内容,这里对修改xml展开讨论. 一.首先看一下,写出内容到xml文档的主要代码: XMLWriter writer = new XMLWriter(OutputStre ...

  4. java基础73 dom4j修改xml里面的内容(网页知识)

    1.DOM4J对XML文件进行增删改操作 实现代码 package com.shore.code; import java.io.File; import java.io.FileOutputStre ...

  5. 使用dom4j修改XML格式的字符串

    XML格式 <data> <ryzd> <record> <western> <record> <diagnoses> < ...

  6. Dom4j修改xml文档

    1. 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt) wirter.write(Document); 2 ...

  7. dom4j修改xml文件

    @SuppressWarnings("unchecked") @Override public void insertCustomInfo(File file, String mo ...

  8. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  9. dom4j修改,获取,增加xml中某个元素的属性值

    XML文件: <?xml version="1.0" encoding="UTF-8"?> <vrvscript> <item I ...

随机推荐

  1. 31 反射方式给类的属性赋值 和 对象赋值(clone)

    1.配置类 package com.da.tool.util.configuration.reflect; /** */ public class JobInfo { private String j ...

  2. what is 'linesize alignment' meaning?

    链接: https://stackoverflow.com/questions/35678041/what-is-linesize-alignment-meaning

  3. webpack中devtool的配置方案[开发模式]---[线上模式]

    // 开发模式下 module.exports = { mode: 'development', devtool: 'cheap-module-eval-source-map' } // 线上模式下 ...

  4. 一个Win32程序的进化------转载

    一个Win32程序的进化 转载 weixin_34273046 发布于2017-11-15 10:53:00 阅读数 10 收藏 展开 一.为什么要学Win32     要回答这个问题,我们就要先搞清 ...

  5. Kubernetes——滚动更新和数据管理

    k8s——滚动更新滚动更新就是一次只更新一小部分副本,更新成功之后再更新更多的副本,最终完成所有副本的更新.滚动更新最大的好处是零停机,整个更新的过程中始终有副本运行,从而保证了业务的连续性.kube ...

  6. Mac安装jdk

    jdk:https://blog.csdn.net/zw235345721/article/details/78702254 mysql:https://www.jianshu.com/p/fd3aa ...

  7. Day3-D-Protecting the Flowers POJ3262

    Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the grass, as usual. When ...

  8. MySQL序列解决方案

    MySQL序列解决方案 MySQLOracleSQL  MySQL自增长与Oracle序列的区别: 自增长只能用于表中的其中一个字段 自增长只能被分配给固定表的固定的某一字段,不能被多个表共用. 自增 ...

  9. Redis集合类型

    集合是元素无序且唯一的列表 命令 增加元素 SADD key member [member ...] > SADD letters a (integer) 1 > SADD letters ...

  10. Cadence套件:Capture + Allegro应用笔记

    1.在Allegro中导入Netlist时,需要进行封装路径的设定: 在Setup->User Preference的Path->Library下面,设定所需封装文件(psm).焊盘文件( ...