zoukankan      html  css  js  c++  java
  • Java 操作XML[方式一] (org.w3c.dom)

    • DOM
      • Document Object Model 文档对象模型, 擅长读(小规模)/写, 直观易用
      • 其处理方式是将XML整个作为类似树结构的方式读入内存中以便操作及解析, 方便修改.
        所以当解析大数据量的XML文件时, 有内存泄漏及程序崩溃的风险.
      • DOM类
        • DocumentBuilder解析类, parse方法
        • Node节点主接口, getChildNodes返回一个NodeList
        • NodeList节点列表, 每一个元素是一个Node
        • Document文档根节点
        • Element标签节点元素(每一个标签都是标签节点)
        • Text节点(包含在XML元素内的, 都算Text节点)
        • Attr节点(每一个属性节点)
    // XML_DOMReadWrite.java
    package hello;
    
    import org.w3c.dom.*;
    
    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 java.io.File;
    
    public class XML_DOMReadWrite {
        public static void main(String[] args) {
    //        recursiveTraverse();
    
    //        traverseBySearch();
            writeXml();
        }
    
        /**
         * 从上到下访问xml
         */
        public static void recursiveTraverse() {
            try {
                // 采用Dom解析xml文件
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse("users.xml");
    
                // 获取所有的一级子菜单
                NodeList usersList = doc.getChildNodes();
                for (int i = 0; i < usersList.getLength(); i++) {
                    Node users = usersList.item(i);
                    NodeList userList = users.getChildNodes(); // 获取二级子节点user的列表
    
                    for (int j = 0; j < userList.getLength(); j++) {
                        Node user = userList.item(j);
                        if (user.getNodeType() == Node.ELEMENT_NODE) {
                            NodeList metaList = user.getChildNodes();
                            for (int k = 0; k < metaList.getLength(); k++) { // 7
                                // 到最后一级菜单
                                Node meta = metaList.item(k);
                                if (meta.getNodeType() == Node.ELEMENT_NODE) {
                                    System.out.println(metaList.item(k).getNodeName() + ":" + metaList.item(k).getTextContent());
                                }
                            }
                            System.out.println("-------");
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 根据名称进行搜索
         */
        public static void traverseBySearch() {
            try {
                // 采用 Dom 解析xml文件
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse("users.xml");
    
                Element rootEle = doc.getDocumentElement();
                NodeList nodeList = rootEle.getElementsByTagName("name");
                if (nodeList != null) {
                    for (int i = 0; i < nodeList.getLength(); i++) {
                        Element ele = (Element) nodeList.item(i);
                        System.out.println(ele.getNodeName() + " = " + ele.getTextContent());
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 写xml文件
         */
        public static void writeXml() {
            try {
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.newDocument(); // 新创建一个Document节点
                if (doc != null) {
                    Element docx = doc.createElement("document"); // 都采用Document创建元素
                    Element ele1 = doc.createElement("ele1");
                    ele1.setAttribute("type", "pragraph");
                    ele1.setAttribute("alignment", "left"); // element增加两个属性
    
                    Element ele2 = doc.createElement("ele2");
                    ele2.setAttribute("type", "text");
                    ele2.setAttribute("alignment", "right");
    
                    Element ele3 = doc.createElement("ele3");
                    ele3.appendChild(doc.createTextNode("aaa")); // 给节点赋值
    
                    ele1.appendChild(ele3);
                    docx.appendChild(ele1);
                    docx.appendChild(ele2);
                    doc.appendChild(docx);
    
                    TransformerFactory tf = TransformerFactory.newInstance();
                    Transformer transformer = tf.newTransformer();
                    DOMSource source = new DOMSource(doc);
    
                    // 定义目标文件
                    File file = new File("dom_write_test.xml");
                    StreamResult result = new StreamResult(file);
    
                    // 将xml内容写入到文件中
                    transformer.transform(source, result);
                    System.out.println("write xml file successfully");
    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }
    
    
    <!-- users.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <users>
        <user id="001">
            <name>Mary</name>
            <age>3</age>
            <sex>Female</sex>
        </user>
        <user id="002">
            <name>Mike</name>
            <age>18</age>
            <sex>Male</sex>
        </user>
        <user id="003">
            <name>ZhaZhaHui</name>
            <age>38</age>
            <sex>Male</sex>
        </user>
    </users>
    
    <!-- dom_write_test.xml -->
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <document>
        <ele1 alignment="left" type="pragraph">
            <ele3>aaa</ele3>
        </ele1>
        <ele2 alignment="right" type="text"/>
    </document>
    
  • 相关阅读:
    QML中 Webview 元素的runJavaScript() 函数的使用方法
    Thinkphp 第二篇:如何将一个外部项目导入到Thimkphp环境中
    AMD电脑装完Winsows10后开机蓝屏,报错代码:cdmsnroot_s.sys
    JVM02——JVM运行时内存
    JVM01——JVM内存区域的构成
    JVM04——七个GC垃圾收集器
    JVM03——四种垃圾回收算法
    Mybatis的缓存机制详解
    mybatis插入insert操作,返回自增id
    mybatis批量查询-插入-删除
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/12653321.html
Copyright © 2011-2022 走看看