• 用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");
        }
    }
  • 相关阅读:
    WPF-学习笔记 将控件添加到Grid中的指定行指定列
    WPF 学习笔记-在WPF下创建托盘图标
    WPF-学习笔记 动态修改控件Margin的值
    WPF-学习笔记 按下鼠标拖动窗口
    WPF 学习笔记-判断动画完成的画件
    WPF 学习笔记-跨线程引用控件
    WPF 学习笔记-设置属性使窗口不可改变大小
    C语言博客作业02循环结构
    C语言博客作业03函数
    C语言博客作业01分支、顺序结构
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/5956792.html
Copyright © 2020-2023  润新知