【java开发系列】—— JDOM创建、修改、删除、读取XML文件
有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。
创建XML文档
XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点。而每个子元素都是一个Element对象,对象可以向下包含。
1 因此我们可以通过先创建元素再将元素添加到父元素中,最后将顶层元素添加到根元素中。
2 创建完文档元素后,就可以把元素添加到document对象中,然后写入文件。
主要使用的函数:
Element.setAttribute 为元素添加信息 Element.addContent(String,String) 为元素添加子元素内容,也可以直接添加另一个元素节点 Document.setRootElement(Element) 为文档添加根元素 XMLOutputter.output(Document,FileWriter) 将Docuemnt写入到FileWriter文件流中
下面是主要的操作过程,写入文件的过程放到了saveXML中
@SuppressWarnings("null")
public static void createXML() {
// 创建document
Document mydoc = new Document();
// 创建元素person1
Element person1 = new Element("person");
person1.setAttribute("id", "ID001");
// 添加注释
person1.addContent(new Comment("this is person1"));
person1.addContent(new Element("name").setText("xingoo"));
person1.addContent(new Element("age").setText("25"));
person1.addContent(new Element("sex").setText("M"));
// 可以嵌套添加子元素
Element address1 = new Element("address");
address1.setAttribute("zone", "province");
address1.addContent("LiaoNing");
person1.addContent(address1);
// 创建元素person2
Element person2 = new Element("person");
person2.setAttribute("id", "ID002");
// 添加注释
person2.addContent(new Comment("this is person2"));
person2.addContent(new Element("name").setText("xhalo"));
person2.addContent(new Element("age").setText("26"));
person2.addContent(new Element("sex").setText("M"));
// 可以嵌套添加子元素
Element address2 = new Element("address");
address2.setAttribute("zone", "province");
address2.addContent("JiLin");
person2.addContent(address2);
// 在doc中添加元素Person
Element info = new Element("information");
info.addContent(person1);
info.addContent(person2);
mydoc.setRootElement(info);
saveXML(mydoc);
}
saveXML()代码:
public static void saveXML(Document doc) {
// 将doc对象输出到文件
try {
// 创建xml文件输出流
XMLOutputter xmlopt = new XMLOutputter();
// 创建文件输出流
FileWriter writer = new FileWriter("person.xml");
// 指定文档格式
Format fm = Format.getPrettyFormat();
// fm.setEncoding("GB2312");
xmlopt.setFormat(fm);
// 将doc写入到指定的文件中
xmlopt.output(doc, writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
执行后,刷新项目,就可以在项目下看到person.xml文件了。

读取XML文档
读取文档,首先需要一个xml的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作。
主要使用的函数:
SAXBuilder.build("xxx.xml") 解析XML文档
Document.getRootElement() 获取根元素
Element.getChildren() 获取根元素下的子元素,返回List<Element>
Element.getAttributeValue(String) 获取指定元素的信息
Element.getChildText 获取指定元素的内容
public static void readXML() {
// 使用SAXBuilder解析器解析xml文件
SAXBuilder sb = new SAXBuilder();
Document doc = null;
try {
doc = sb.build("person.xml");
Element root = doc.getRootElement();
List<Element> list = root.getChildren("person");
for (Element el : list) {
String id = el.getAttributeValue("id");
String name = el.getChildText("name");
String age = el.getChildText("age");
String sex = el.getChildText("sex");
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("age:" + age);
System.out.println("sex:" + sex);
System.out.println("--------------------------");
}
} catch (Exception e) {
e.printStackTrace();
}
}
修改XML文档
修改XML文档,也是先利用解析器找到指定的元素,使用setText或者setAttributeValue来修改元素内容
修改后记得要保存到文件中,即在此调用saveXML()
public static void updateXML(){
SAXBuilder sb = new SAXBuilder();
Document doc = null;
try {
doc = sb.build("person.xml");
Element root = doc.getRootElement();
List<Element> list = root.getChildren("person");
for (Element el : list) {
if (el.getAttributeValue("id").equals("ID001")) {
Element name = el.getChild("name");
name.setText("xingoo---update");
}
}
} catch (Exception e) {
e.printStackTrace();
}
saveXML(doc);
}
删除XML文档元素
删除操作类似修改,调用removeCotent就可以根据内容删除指定的元素了。但是要用他的父节点调用。最后也需要保存到文件中才可以。
public static void removeXML() {
SAXBuilder sb = new SAXBuilder();
Document doc = null;
try {
doc = sb.build("person.xml");
Element root = doc.getRootElement();
List<Element> list = root.getChildren("person");
for (Element el : list) {
if (el.getAttributeValue("id").equals("ID001")) {
root.removeContent(el);
}
}
} catch (Exception e) {
e.printStackTrace();
}
saveXML(doc);
}
【java开发系列】—— JDOM创建、修改、删除、读取XML文件的更多相关文章
- Android开发系列(十七):读取assets文件夹下的数据库文件
在做Android应用的时候,不可避免要用到数据库.可是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客攻克了我前面博客中 ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- Linux创建修改删除用户和组
Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...
- oracle11g创建修改删除表
oracle11g创建修改删除表 我的数据库名字: ORCL 密码:123456 1.模式 2.创建表 3.表约束 4.修改表 5.删除表 1.模式 set oracle_sid=OR ...
- MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制
/*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...
- java开发知识IO知识之输入输出流以及文件
目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...
- Android 开发自己的网络收音机4——读取XML文件的电台数据
国内外的电台数据很多,起码有好几百,所以把这些数据都写到代码里面是不实际的.只能写成一个数据文件,程序启动的时候再去加载.保存这些简单数据,我们肯定会优先使用XML文件,今天讲讲如何读取XML里面的数 ...
- Spring相关:jdom学习:读取xml文件
云课堂马士兵的spring2.5课程中提到的 用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类 ...
- 在C#中创建和读取XML文件
1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...
- jdom学习读取XML文件
用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...
随机推荐
- POJ - 1061 扩展gcd
题意:求\((n-m)t+Lk=x-y\)的解\(t\) #include<iostream> #include<algorithm> #include<cstdio&g ...
- win7和centos7双系统--转
转自http://blog.chinaunix.net/uid-30867756-id-5758575.html 参考:http://blog.csdn.net/hsg77/article/detai ...
- 公钥,私钥,数字签名,SSL的基本概念
一,公钥私钥 1,公钥和私钥成对出现 2,公开的密钥叫公钥,只有自己知道的叫私钥 3,用公钥加密的数据只有对应的私钥可以 解密 4,用私钥加密的数据只有对应的公钥可以解密 5,如果可以用公钥解密,则必 ...
- mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)
背景: 1.有一个定时任务,每10分钟入一批统计数据: 2.另一个定时任务,每天定时清理7天前数据,此定时任务每天01:18:00执行: 现象: 每天01:20:00的统计数据入库失败,异常信息如下, ...
- 20条IPTables防火墙规则用法! [转]
20条IPTables防火墙规则用法! 导读 管理网络流量是系统管理员必需处理的最棘手工作之一,我们必需规定连接系统的用户满足防火墙的传入和传出要求,以最大限度保证系统免受攻击.很多用户把 Linux ...
- mysql 查询及 删除表中重复数据
CREATE TABLE `test` ( `id` INT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20) NULL DEFAULT NULL, `a ...
- Wireshark使用技巧
Wireshark使用技巧 在分析网络时,包应该尽量的小,只要能定位问题即可. 1. 只抓包头,在wireshark中可以设置抓包大小. 如果使用tcpdump命令: [root@server_1 / ...
- Hashtable和HashMap的区别,Properties类的简单使用
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- this,super,和继承
this是指当前对象的引用,super是指直接父类的引用 比如 我建造一个类 public class Person(){ private String name; private int age; ...
- Hadoop Yarn REST API未授权漏洞利用挖矿分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 一.背景情况 5月5日腾讯云安全曾针对攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未 ...