zoukankan      html  css  js  c++  java
  • 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作

    dom方式解析XML原理

    XML文件

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <class>
        <student>
            <name>张三</name>
            <sid>111111</sid>
        </student>
        <student>
            <name>李四</name>
            <sid>222222</sid>
        </student>
    </class>

    Java代码

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.Transformer;
    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.w3c.dom.Text;
    
    public class JaxpDom {
        static Document document;
        public static void main(String[] args) throws Exception {
            add();//在第一个学生信息里增加一个性别标签<sex>男<sex>
            //delete();//删除上个方法新建的sex标签
            //modify();//将第二个学生的姓名改为王五
            //select();//查询第一个name标签的内容
            //selectAll();//遍历出所有的标签
        }
        
        //在第一个学生信息里增加一个性别标签<sex>男<sex>
        private static void add() throws Exception {
            getParse();
            Element element=document.createElement("sex");
            Text text=document.createTextNode("男");
            element.appendChild(text);
            document.getElementsByTagName("student").item(0).appendChild(element);
            writeBack();
        }
        
        //删除上个方法新建的sex标签
        private static void delete() throws Exception{
            getParse();
            document.getElementsByTagName("student").item(0).removeChild(document.getElementsByTagName("sex").item(0));
            writeBack();
        }
        
        //将第二个学生的姓名改为王五
        private static void modify() throws Exception {
            getParse();
            document.getElementsByTagName("name").item(1).setTextContent("王五");
            writeBack();
        }
    
        //查询第一个name标签的内容
        private static void select() throws Exception {
            getParse();
            System.out.println(document.getElementsByTagName("name").item(0).getTextContent());
        }
        
        //遍历出所有的标签
        private static void selectAll() throws Exception{
            getParse();
            backtrack(document);
        }
        //递归
        private static void backtrack(Node node) {
            if(node.getNodeType()==Node.ELEMENT_NODE)
            {
                System.out.println(node.getNodeName());
            }
            NodeList list=node.getChildNodes();
            for(int i=0;i<list.getLength();i++)
            {
                backtrack(list.item(i));
            }
        }
        
        //将document从内存写回文件
        private static void writeBack()throws Exception {
            TransformerFactory transformerFactory=TransformerFactory.newInstance();
            Transformer transformer= transformerFactory.newTransformer();
            transformer.transform(new DOMSource(document), new StreamResult("src/1.xml"));
        }
        
        //初始化
        private static void getParse() throws Exception {
            DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
            document=documentBuilder.parse("src/1.xml");
        }
    }
  • 相关阅读:
    1061. 判断题(15)
    1070. 结绳(25)
    1069. 微博转发抽奖(20)
    1068. 万绿丛中一点红(20)
    1067. 试密码(20)
    DB2sql关键字——ALTER TABLE ....ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE
    DB2系统内置——SYSCAT.TABLES 所有的字段说明
    DB2系统内置——db2日期和时间常用汇总
    Linux——下查找某个文件位置的方法
    Linux下清除tomcat缓存
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/5956792.html
Copyright © 2011-2022 走看看