zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Web 前端开发中一些兼容性问题及其解决办法 (持续更)
    沈逸的IT专栏---shenyisyn
    程序员该做的事
    职场需要切忌的几点——《程序员,你伤不起》
    百度天气API接口
    C#简单音乐播放器ListBox歌单列表
    CentOS7 安装java(jre 1.8)
    CentOS7 系统安装与设置
    这个可以有,记录下
    在centos 7中让网卡自启动
  • 原文地址:https://www.cnblogs.com/yunqing/p/10381726.html
Copyright © 2011-2022 走看看