java读写本地xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config> 
  <product> 
    <good canAnc="0" canSale="0" id="1" name="联想电脑" price="1200"/>  
    <good canAnc="0" canSale="0" id="2" name="香草巧克力冰淇淋" price="1200"/>  
    <good canAnc="0" canSale="0" id="3" name="巧克力冰淇淋" price="1200"/>  
    <good canAnc="0" canSale="0" id="4" name="意式浓缩咖啡" price="1800"/>  
    
  </product> 
</config>
//Test
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;


public class Test {

    /**
     * 读xml文件
     * @param args
     */
    public static void main(String[] args) {
        // 创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory xDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
        try {
            // 创建一个DocumentBuilder对象
            DocumentBuilder xdocumentBuilder = xDocumentBuilderFactory.newDocumentBuilder();
            // 传入要解析的XML文件
            Document xDocument = xdocumentBuilder.parse(new File("D:/config.xml"));
            // 通过标签获得节点集合
            NodeList beanList = xDocument.getElementsByTagName("good");
            System.out.println("共有" + beanList.getLength() + "个节点");
            // 遍历每一个bean节点
            for (int i = 0; i < beanList.getLength(); i++) {
                // 获取其中一个节点
                String id = beanList.item(i).getAttributes().item(2).getNodeValue();
                String name = beanList.item(i).getAttributes().item(3).getNodeValue();
                String price = beanList.item(i).getAttributes().item(4).getNodeValue();
                String canSale = beanList.item(i).getAttributes().item(1).getNodeValue();
                System.out.println(id + "-" + name + "-" + price + "-" + canSale);
                //当i=0,即把第一个good的第index=3的属性值修改为联想电脑
                if(i==0){
                    beanList.item(i).getAttributes().item(3).setNodeValue("联想电脑");
                }
            }
            //修改之后写入本地xml
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(xDocument);
            StreamResult result = new StreamResult(new File("D:/config.xml"));
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.transform(source, result);
            System.out.println("XML file updated successfully");

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }


    }








}

参考https://blog.csdn.net/Rongbo_J/article/details/50240547

参考内容

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>
原文地址:https://www.cnblogs.com/yunqing/p/10381726.html