Java&Xml教程七使用JDOM修改XML文件内容

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>

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>

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念