微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java&Xml教程三使用DOM方式修改XML文件内容

DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素、删除元素、修改元素值、修改元素属性等操作。

我们的XML文件内容如下:
employee.xml

<?xml version=1.0 encoding=UTF-8 standalone=no?><Employees>
    <Employee id=1>
        <name>Pankaj</name>
        <age>29</age>
        <role>Java Developer</role>
        <gender>Male</gender>
    </Employee>
    <Employee id=2>
        <name>Lisa</name>
        <age>35</age>
        <role>CSS Developer</role>
        <gender>Female</gender>
    </Employee></Employees>

我们将修改XML文件内容
1.根据员工的性别(gender)修改”id”属性值,性别为男(Male)的id属性值中追加”M”,为女(Female)的id属性值追加”F”。
2.修改name元素的值,全部变成大写。
3.”gender”元素已经没有存在的意义了,我们删除它。
4.在employee节点下新增一个”salary”节点。
当我们完成上述操作后,将内容保存在一个新的xml文件中。
下面是使用DOM方式解析的Java程序代码
ModifyXMLDOM.java

package com.journaldev.xml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class ModifyXMLDOM {

    public static void main(String[] args) {
        String filePath = employee.xml;
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();

            //update attribute value
            updateAttributeValue(doc);

            //update Element value
            updateElementValue(doc);

            //delete element
            deleteElement(doc);

            //add new element
            addElement(doc);

            //write the updated document to file or console
            doc.getDocumentElement().normalize();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File(employee_updated.xml));
            transformer.setoutputProperty(OutputKeys.INDENT, yes);
            transformer.transform(source, result);
            System.out.println(XML file updated successfully);

        } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
            e1.printstacktrace();
        }
    }

    private static void addElement(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;

        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Element salaryElement = doc.createElement(salary);
            salaryElement.appendChild(doc.createTextNode(10000));
            emp.appendChild(salaryElement);
        }
    }

    private static void deleteElement(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node genderNode = emp.getElementsByTagName(gender).item(0);
            emp.removeChild(genderNode);
        }

    }

    private static void updateElementValue(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node name = emp.getElementsByTagName(name).item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().toupperCase());
        }
    }

    private static void updateAttributeValue(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            String gender = emp.getElementsByTagName(gender).item(0).getFirstChild().getNodeValue();
            if(gender.equalsIgnoreCase(male)){
                //prefix id attribute with M
                emp.setAttribute(id, M+emp.getAttribute(id));
            }else{
                //prefix id attribute with F
                emp.setAttribute(id, F+emp.getAttribute(id));
            }
        }
    }

}

输出xml文件内容
employee_updated.xml

<?xml version=1.0 encoding=UTF-8 standalone=no?><Employees>
    <Employee id=M1>
        <name>PANKAJ</name>
        <age>29</age>
        <role>Java Developer</role>

    <salary>10000</salary></Employee>
    <Employee id=F2>
        <name>LISA</name>
        <age>35</age>
        <role>CSS Developer</role>

    <salary>10000</salary></Employee></Employees>

原文地址:http://www.jb51.cc/

DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素、删除元素、修改元素值、修改元素属性等操作。
我们的XML文件内容如下:
employee.xml

<?xml version=1.0 encoding=UTF-8 standalone=no?><Employees>
    <Employee id=1>
        <name>Pankaj</name>
        <age>29</age>
        <role>Java Developer</role>
        <gender>Male</gender>
    </Employee>
    <Employee id=2>
        <name>Lisa</name>
        <age>35</age>
        <role>CSS Developer</role>
        <gender>Female</gender>
    </Employee></Employees>

我们将修改XML文件内容
1.根据员工的性别(gender)修改”id”属性值,性别为男(Male)的id属性值中追加”M”,为女(Female)的id属性值追加”F”。
2.修改name元素的值,全部变成大写。
3.”gender”元素已经没有存在的意义了,我们删除它。
4.在employee节点下新增一个”salary”节点。
当我们完成上述操作后,将内容保存在一个新的xml文件中。
下面是使用DOM方式解析的Java程序代码
ModifyXMLDOM.java

package com.journaldev.xml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class ModifyXMLDOM {

    public static void main(String[] args) {
        String filePath = employee.xml;
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();

            //update attribute value
            updateAttributeValue(doc);

            //update Element value
            updateElementValue(doc);

            //delete element
            deleteElement(doc);

            //add new element
            addElement(doc);

            //write the updated document to file or console
            doc.getDocumentElement().normalize();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File(employee_updated.xml));
            transformer.setoutputProperty(OutputKeys.INDENT, yes);
            transformer.transform(source, result);
            System.out.println(XML file updated successfully);

        } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
            e1.printstacktrace();
        }
    }

    private static void addElement(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;

        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Element salaryElement = doc.createElement(salary);
            salaryElement.appendChild(doc.createTextNode(10000));
            emp.appendChild(salaryElement);
        }
    }

    private static void deleteElement(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node genderNode = emp.getElementsByTagName(gender).item(0);
            emp.removeChild(genderNode);
        }

    }

    private static void updateElementValue(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node name = emp.getElementsByTagName(name).item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().toupperCase());
        }
    }

    private static void updateAttributeValue(Document doc) {
        NodeList employees = doc.getElementsByTagName(Employee);
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            String gender = emp.getElementsByTagName(gender).item(0).getFirstChild().getNodeValue();
            if(gender.equalsIgnoreCase(male)){
                //prefix id attribute with M
                emp.setAttribute(id, M+emp.getAttribute(id));
            }else{
                //prefix id attribute with F
                emp.setAttribute(id, F+emp.getAttribute(id));
            }
        }
    }

}

输出xml文件内容
employee_updated.xml

<?xml version=1.0 encoding=UTF-8 standalone=no?><Employees>
    <Employee id=M1>
        <name>PANKAJ</name>
        <age>29</age>
        <role>Java Developer</role>

    <salary>10000</salary></Employee>
    <Employee id=F2>
        <name>LISA</name>
        <age>35</age>
        <role>CSS Developer</role>

    <salary>10000</salary></Employee></Employees>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类