• 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>
  • 相关阅读:
    hashCode()相同,equals()也一定为true吗?
    什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题?
    LOJ114_k 大异或和_线性基
    BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数
    BZOJ_4184_shallot_线段树按时间分治维护线性基
    BZOJ_2844_albus就是要第一个出场_线性基
    BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
    BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图
    BZOJ_3881_[Coci2015]Divljak_AC自动机+dfs序+树状数组
    BZOJ_1532_[POI2005]Kos-Dicing_二分+网络流
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468364.html
Copyright © 2020-2023  润新知