JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强。前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容。

在这个教程中,我们准备对下面的XML文件进行修改:

employees.xml

<?xml version="1.0" encoding="UTF-8"?>
<Employees xmlns="http://www.journaldev.com/employees">
<Employee id="1">
<age>25</age>
<name>Pankaj</name>
<gender>Male</gender>
<role>Java Developer</role>
</Employee>
<Employee id="2">
<age>34</age>
<name>Mona</name>
<gender>Female</gender>
<role>Manager</role>
</Employee>
<Employee id="3">
<age>45</age>
<name>Dave</name>
<gender>Male</gender>
<role>Support</role>
</Employee>
</Employees>

我们将改变xml中每个Employee元素:

1.修改所有name元素,使它的内容全部变成大写。

2.在gender(性别)为Male(男)的id属性值后追加M,gender(性别)为Female(女) 的id属性值后追加F。

3.删除gender元素。

4.为每个Employee元素增加salary(薪水)子元素,默认值为1000。

下面是程序代码:

JDOMXMLEditor.java

package com.journaldev.xml.jdom;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List; import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.Namespace;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter; public class JDOMXMLEditor { public static void main(String[] args) throws JDOMException, IOException {
final Namespace ns = Namespace.getNamespace("http://www.journaldev.com/employees"); //Get the JDOM document
org.jdom2.Document doc = useSAXParser("employees.xml"); //Get list of Employee element
Element rootElement = doc.getRootElement();
List<Element> listEmpElement = rootElement.getChildren("Employee", ns); //loop through to edit every Employee element
for (Element empElement : listEmpElement) { //change the name to BLOCK letters
String name = empElement.getChildText("name", ns);
if (name != null)
empElement.getChild("name", ns).setText(name.toUpperCase()); //edit the ID attribute based on Gender
String gender = empElement.getChildText("gender", ns);
if (gender != null && gender.equalsIgnoreCase("female")) {
String id = empElement.getAttributeValue("id");
empElement.getAttribute("id").setValue(id + "F");
} else {
String id = empElement.getAttributeValue("id");
empElement.getAttribute("id").setValue(id + "M");
} //remove gender element as it's not needed anymore
empElement.removeChild("gender", ns); //add salary element with default value to every employee
empElement.addContent(new Element("salary", ns).setText("1000"));
} //document is processed and edited successfully, lets save it in new file
XMLOutputter xmlOutputter = new XMLOutputter(Format.getPrettyFormat());
//output xml to console for debugging
//xmlOutputter.output(doc, System.out);
xmlOutputter.output(doc, new FileOutputStream("employees_new.xml"));
} //Get JDOM document from SAX Parser
private static org.jdom2.Document useSAXParser(String fileName) throws JDOMException,
IOException {
SAXBuilder saxBuilder = new SAXBuilder();
return saxBuilder.build(new File(fileName));
} }

需要注意的是上面代码使用命名空间获取所有元素,运行程序输出XML文件内容:

employees_new.xml

<?xml version="1.0" encoding="UTF-8"?>
<Employees xmlns="http://www.journaldev.com/employees">
<Employee id="1M">
<age>25</age>
<name>PANKAJ</name>
<role>Java Developer</role>
<salary>1000</salary>
</Employee>
<Employee id="2F">
<age>34</age>
<name>MONA</name>
<role>Manager</role>
<salary>1000</salary>
</Employee>
<Employee id="3M">
<age>45</age>
<name>DAVE</name>
<role>Support</role>
<salary>1000</salary>
</Employee>
</Employees>

Java&Xml教程(七)使用JDOM修改XML文件内容的更多相关文章

  1. Java不走弯路教程(3.用户验证与文件内容查询)

    3.用户验证与文件内容查询 在上一章中,我们完成了对指定文件内容的输出操作. 我们现在有如下格式的文件product.db id,product_name,product_detail 1,noteb ...

  2. Mac下显示隐藏文件 以及修改 hosts文件内容

    修改hosts 文件内容: 进入etc 文件夹,找到hosts 文件,把该文件复制出来,修改完里面的内容后,先把etc中的hosts 文件删除,然后在把修改后的文件脱机去 可能需要管理员的密码,你输入 ...

  3. 如何修改PDF文件内容,PDF怎么添加背景

    很多的情况下,大家都会遇到PDF文件,不管是在学习中还是在工作中,对于PDF文件,文件的修改编辑是需要用到PDF编辑软件的,在编辑文件的时候,发现文件的页面是有背景颜色的,又该如何修改背景颜色呢,不会 ...

  4. 直接修改class文件内容即使是文本会导致App异常,正确方式是修改java再用生成的class替换掉原有的class

    前几天来了个小任务,把某项目中某人的邮件地址改了下. 由于对项目不熟悉,于是采用find方式找出app中所有包含某人邮件地址的文件都找出来了. xml,properties大约三四个,还有两个clas ...

  5. manifest.xml微擎系统模块的安装文件内容

    微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库中相应记录,并执行manifest.xml里指定的脚本. manifest.xml文件内容详细介绍如下: manifest - ...

  6. Java之递归遍历目录,修改指定文件的指定内容

    EditProperties.java package PropertiesOperation.Edit; import java.io.File; /** * 替换指定Porpoerties文件中的 ...

  7. python修改txt文件内容

    ①以r模式打开文件并用readlines方法读入列表l中 ②修改相关行,直接用l[n]形式即可 ③关闭文件 ④以w方式打开文件,用writelines方法写入文件(覆盖文件内容) ⑤关闭文件 需要注意 ...

  8. 按模板批量修改Excel文件内容

    Sub 按模板修改Excel文件() Dim MoBanWorkBook As Workbook Set MoBanWorkBook = Application.ActiveWorkbook Dim ...

  9. python文件修改 核心5步,函数实现修改任意文件内容

    文件修改 核心5步1.以读的模式打开原文件,产生句柄f12.以写的模式打开一个新文件,产生句柄f23.读取原文件的内容并将原文件需要替换的内容修改写入到新文件4.删除原文件5.把新文件重名了成原文件 ...

随机推荐

  1. 解决使用myeclipse电脑卡的问题

    1. 原因:myeclipse会自动更新,因此会占用大量内存 2. 解决方法: (1)window->Perferences->General->Startup and Shutdo ...

  2. [kuangbin带你飞]专题六 最小生成树 N - 畅通工程再续

    相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...

  3. codevs——1675 大质数 2

    1675 大质数 2  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 小明因为没做作业而被数学老师罚站,之 ...

  4. 微软消息队列MessageQueue(MQ)

    首先本地安装微软的消息队列服务器. 基础类: namespace Core.MessageQueueTest { public class TestQueue : IDisposable { prot ...

  5. Android Studio Module 的添加与删除

    1. 添加Module(此时可以字面翻译为“模块”,意译为“其他工程”) 2. 删除Module 你要知道,Android Studio的非人性设计,导致删除一个module都是繁琐的. 当你想在An ...

  6. mybatis中jdbcType的作用和是否必须

    1. mybatis中 jdbcType 时间类型 当jdbcType = DATE 时, 只传入了 年月日 jdbcType = TIMESTAMP ,  年月日+ 时分秒 2. jdbcType ...

  7. VM Workstation中如何实现Linux系统的通信

    1 确保虚拟机中的Linux是NAT联网方式   2确保Vmware Network Adapter VMnet1和 VMnet8 都是"已启用"状态,如果是"未识别的网 ...

  8. jquery 实现可编辑div

    html大致例如以下: <ol id="ol_group" class="list-group list_of_items"> <li cla ...

  9. Linux Framebuffer驱动剖析之中的一个—软件需求

    嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇<Linux字符设备驱动剖析>.嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT双方面的原创技术分享,稍后会公布嵌入式企鹅圈的2 ...

  10. oc72--NSArray排序

    // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomi ...