• 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>
  • 相关阅读:
    jquery 获取当前元素的索引值
    JQuery中根据属性或属性值获得元素(6种情况获取方法)
    jquery如何获取某一个兄弟节点
    JAVA学习<六>
    JAVA学习<四>
    JAVA学习<三>
    iOS定位到崩溃代码行数
    Swift3.0基础语法学习<五>
    Swift3.0基础语法学习<四>
    Swift3.0基础语法学习<三>
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468364.html
Copyright © 2020-2023  润新知