• XML


    简介

      

    文档结构

      

    XML组成

      

    标签编写注意事项

      

    转义符

      

    解析XML技术

      

    使用DOM解析XML

      

      

        public void loadDocument() {
            // 1、创建解析器工厂实例
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // 2、从解析器工厂实例中获取一个解析器实例
            try {
                DocumentBuilder builder = factory.newDocumentBuilder();
                // 3、解析XML文件,得到DOM树
                doc = builder.parse("收藏信息.xml");
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    加载DOM树

     解析XML文件

      

        public void showInfo() {
            // 1、获取所有brand
            NodeList brandList = doc.getElementsByTagName("Brand");
            // 2、遍历所有的brand标签
            for (int i = 0; i < brandList.getLength(); i++) {
                Node brandNode = brandList.item(i);
                Element brandEle = (Element) brandNode;
                String brandStr = brandEle.getAttribute("name");
                // 获取brand的所有子节点
                NodeList typeList = brandEle.getChildNodes();
                // 遍历所有type标签
                for (int j = 0; j < typeList.getLength(); j++) {
                    Node typeNode = typeList.item(j);
                    // 如果当前Node是一个Element,则进行转换
                    if (typeNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element typeEle = (Element) typeNode;
                        // 获取此Element的Name属性值
                        String typeStr = typeEle.getAttribute("name");
                        System.out.println("手机品牌:" + brandStr + ",型号" + typeStr);
                    }
                }
            }
        }
    解析XML文件

     保存XML文件

      

        public void saveXML(String path) {
            // 1、创建一个转换工厂
            TransformerFactory factory = TransformerFactory.newInstance();
            // 2、使用转换工厂创建一个转换器
            try {
                Transformer former = factory.newTransformer();
                // 设置转换器的编码格式
                former.setOutputProperty(OutputKeys.ENCODING, "gb2312");
                // 3、进行转换 源(DOM树)——>目标(XML文件)
                Source xmlSource = new DOMSource(doc);
                Result outputTarget = new StreamResult(path);
                former.transform(xmlSource, outputTarget);
            } catch (TransformerConfigurationException e) {
                e.printStackTrace();
            } catch (TransformerException e) {
                e.printStackTrace();
            }
        }
    保存XML文件

     添加DOM节点

      

        public void addNewPhoneInfo() {
            // 1、创建一个brand节点
            Element newBrand = doc.createElement("Brand");
            newBrand.setAttribute("name", "三星");
            // 2、创建一个type节点
            Element newType = doc.createElement("type");
            newType.setAttribute("name", "Note4");
            // 3、将type节点作为brand的子节点
            newBrand.appendChild(newType);
            // 4、将brand挂到DOM树
            doc.getElementsByTagName("PhoneInfo").item(0).appendChild(newBrand);
        }
    添加DOM节点

     修改/删除DOM节点

      

        public void modifyPhoneInfo() {
            // 1、找到name值为三星的brand节点
            NodeList brandList = doc.getElementsByTagName("Brand");
            for (int i = 0; i < brandList.getLength(); i++) {
                Node brandNode = brandList.item(i);
                Element brandEle = (Element) brandNode;
                if (brandEle.getAttribute("name").equals("三星")) {
                    // 2、修改节点的name属性值
                    brandEle.setAttribute("name", "SAMSUNG");
                }
            }
        }
    修改DOM节点
        public void delPhoneInfo() {
            // 1、找到name值为三星的brand节点
            NodeList brandList = doc.getElementsByTagName("Brand");
            for (int i = 0; i < brandList.getLength(); i++) {
                Node brandNode = brandList.item(i);
                Element brandEle = (Element) brandNode;
                if (brandEle.getAttribute("name").equals("SAMSUNG")) {
                    // 2、使用这个节点的父节点来删除它
                    brandEle.getParentNode().removeChild(brandEle);
                }
            }
        }
    删除DOM节点 

    使用DOM4J解析XML

      

    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Iterator;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class TestDOM4J {
        Document doc = null;
    
        /**
         * 加载DOM树
         */
        public void loadDocument() {
            SAXReader saxReader = new SAXReader();
            try {
                doc = saxReader.read("收藏信息.xml");
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 显示所有信息
         */
        public void showInfo() {
            Element root = doc.getRootElement();
            Iterator itBrand = root.elementIterator();
            while (itBrand.hasNext()) {
                Element brandEle = (Element) itBrand.next();
                String brandStr = brandEle.attributeValue("name");
                Iterator itType = brandEle.elementIterator();
                while (itType.hasNext()) {
                    Element typeEle = (Element) itType.next();
                    String typeStr = typeEle.attributeValue("name");
                    System.out.println("手机品牌:" + brandStr + ",型号:" + typeStr);
    
                }
            }
        }
    
        /**
         * 保存XML
         */
        public void saveXML(String path) {
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("gb2312");
            try {
                XMLWriter writer = new XMLWriter(new FileWriter(path), format);
                writer.write(doc);
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 添加一个节点
         */
        public void addPhoneInfo() {
            Element root = doc.getRootElement();
            // 创建一个brand节点
            Element brandEle = root.addElement("Brand");
            // 给Brand节点设置属性
            brandEle.addAttribute("name", "三星");
            // 创建Type节点
            Element typeEle = brandEle.addElement("Type");
            typeEle.addAttribute("name", "Note4");
            this.saveXML("新的收藏信息.xml");
        }
    
        /**
         * 修改节点信息
         */
        public void modifyPhoneInfo() {
            Element root = doc.getRootElement();
            int id = 0;
            Iterator itBrand = root.elementIterator();
            // 遍历后获取每个brand节点
            while (itBrand.hasNext()) {
                id++;
                Element brandEle = (Element) itBrand.next();
                brandEle.addAttribute("id", id + "");
            }
            this.saveXML("新的收藏信息.xml");
        }
    
        /**
         * 删除节点信息
         */
        public void delPhoneInfo() {
            Element root = doc.getRootElement();
            Iterator itBrand = root.elementIterator();
            while (itBrand.hasNext()) {
                Element brandEle = (Element) itBrand.next();
                if (brandEle.attributeValue("name").equals("三星")) {
                    brandEle.getParent().remove(brandEle);
                }
            }
            this.saveXML("新的收藏信息.xml");
        }
    
        public static void main(String[] args) {
            TestDOM4J parse = new TestDOM4J();
            parse.loadDocument();
            parse.saveXML("新的收藏信息.xml");
            parse.addPhoneInfo();
            parse.modifyPhoneInfo();
            parse.delPhoneInfo();
            parse.showInfo();
        }
    }
    使用DOM4J解析XML
  • 相关阅读:
    phpstudy apache无法启动的解决办法
    Windows server 2008 快速搭建域环境
    使用netsh来进行端口转发
    基于docker构建测试环境
    [Leetcode] Linked List Cycle
    Hyper-V下安装Ossim系统
    Windows应用替代方案接龙
    图解CISCO 3550忘记密码解决方法
    硬件代理解决用户上网问题
    图->存储结构->数组表示法(邻接矩阵)
  • 原文地址:https://www.cnblogs.com/xhddbky/p/9175160.html
Copyright © 2020-2023  润新知