有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。

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文件的更多相关文章

  1. Android开发系列(十七):读取assets文件夹下的数据库文件

    在做Android应用的时候,不可避免要用到数据库.可是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客攻克了我前面博客中 ...

  2. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  3. Linux创建修改删除用户和组

    Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...

  4. oracle11g创建修改删除表

    oracle11g创建修改删除表 我的数据库名字: ORCL         密码:123456 1.模式 2.创建表 3.表约束 4.修改表 5.删除表 1.模式 set oracle_sid=OR ...

  5. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

    /*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...

  6. java开发知识IO知识之输入输出流以及文件

    目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...

  7. Android 开发自己的网络收音机4——读取XML文件的电台数据

    国内外的电台数据很多,起码有好几百,所以把这些数据都写到代码里面是不实际的.只能写成一个数据文件,程序启动的时候再去加载.保存这些简单数据,我们肯定会优先使用XML文件,今天讲讲如何读取XML里面的数 ...

  8. Spring相关:jdom学习:读取xml文件

    云课堂马士兵的spring2.5课程中提到的 用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类 ...

  9. 在C#中创建和读取XML文件

    1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...

  10. jdom学习读取XML文件

    用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...

随机推荐

  1. bzoj1221软件开发 费用流

    题目传送门 思路: 网络流拆点有的是“过程拆点”,有的是“状态拆点”,这道题应该就属于状态拆点. 每个点分需要用的,用完的. 对于需要用的,这些毛巾来自新买的和用过的毛巾进行消毒的,流向终点. 对于用 ...

  2. poj2420 A Star not a Tree? 找费马点 模拟退火

    题目传送门 题目大意: 给出100个二维平面上的点,让你找到一个新的点,使这个点到其他所有点的距离总和最小. 思路: 模拟退火模板题,我也不懂为什么,而且一个很有意思的点,就是初始点如果是按照我的代码 ...

  3. CodeChef - RIN 最小割应用 规划问题

    题意:给定\(n\)门课和\(m\)个学期,每门课在每个学期有不同的得分,需要选定一个学期去完成,但存在约束条件,共有\(k\)对课程需要\(a\)在\(b\)开始学前学会,求最大得分(原问题是求最高 ...

  4. ECharts 雷达图怎么在类目值下面显示数值

    需要实现的效果: 官网里面的demo显示数值,都是在拐点处: [解决] 1.只显示类目 <div id="mychart" style="width:300px;h ...

  5. 批量删除Maven中失败的下载项

    [摘自] http://stackoverflow.com/questions/5074063/maven-error-failure-to-transfer Remove all your fail ...

  6. 关于抓取js加载出来的内容抓取

    一.抓取页面 url=https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.ht ...

  7. oracle12C--DG 状态集

    一,物理备库 01,状态查询与状态详解 select switchover_status from v$database 02,状态转换到备用数据库 alter database commit to ...

  8. oracle 备份恢复篇(二)---rman 增备恢复--不完全恢复

    一,环境准备 全备脚本: export TMP=/tmp export TMPDIR=$TMP export ORACLE_BASE=/u01 export ORACLE_SID=prod expor ...

  9. Android开发_如何调用系统默认浏览器访问

    Android开发_如何调用系统默认浏览器访问 2015-10-20 17:53 312人阅读  http://blog.sina.com.cn/s/blog_6efce07e010142w7.htm ...

  10. jqGrid 将行的字变成超连接

    今天在项目中碰到要将jqGrid中的行做成超连接,请看代码步骤: name: , align: "left", formatter: function (cellValue, op ...