• 用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");
        }
    }
  • 相关阅读:
    QMainWindow透明背景
    在Xcode中产看QString的数据
    使用QtConcurrent在线程池中执行网络操作
    QThread和QObject的调用方法总结
    策略模式 C++实现
    【转】单元测试要做多细?
    Mac系统添加QQ邮箱帐号提示无法验证
    Qt半透明对话框
    SVD的几何意义,以及在去噪,推荐系统中的应用
    BP神经网络原理及python实现
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/5956792.html
Copyright © 2020-2023  润新知