JavaSE基础之 XML(可扩展标记语言)

一.知识点

         * xml 数据
         * xml 是一种国际通用的数据格式
         * 最大优点 跨平台
         *
         * xml 是一种 标记型语言 标签<></> 标签都是 成对 出现
         *
         * 了解xml数据格式
         * 如何利用java代码生成xml数据
         * 如何使用xml数据(解析)
         *       解析: 将数据提取出来的过程
         *
         * jar包: dom4j-1.6.1.jar
         *     如何导入jar包:
         *          1.先创建一个文件夹 用于存放jar包
         *          2.在工程根目录下创建libs文件夹 点击根目录右键 new-->Directory-->取名libs
         *          3.将jar包复制粘贴到libs 文件夹中
         *          4.选中jar包右键-->Add as library —>确定(出现小三角则成功)

*创建XML文档
        //第一步 创建document(文档)对象
        Document document = DocumentHelper.createDocument();

        //第二步 创建根标签 所有标签的类型都是Element
        Element root = DocumentHelper.createElement("root");

        //将根标签放入document对象
        document.setRootElement(root);

        //可以为标签添加属性
        //参数1 属性名   参数2 属性值
        root.addAttribute("desc","这是一个根标签");

        //创建子标签
        Element traffic =root.addElement("traffic");

        //在子标签中再添加子标签
        Element brand = traffic.addElement("brand");

        //为子标签添加内容
        brand.setText("lambo");
        Element price = traffic.addElement("price");
        price.setText("600万元");
        Element color = traffic.addElement("color");
        color.setText("宝石蓝");

        /*--------------------生成xml文件-------------------------*/

        //首先创建一个文件
        //文件路径一定确保正确
        File file = new File("xml_file/newXml.xml");
        try {
            FileOutputStream fos = new FileOutputStream(file);

            //对生成的xml文件进行处理
            OutputFormat format = new OutputFormat();

            //换行
            format.setNewlines(true);

            //设置编码格式
            format.setEncoding("utf-8");

            //设置缩进 两个tab
            format.setIndent("      ");

            //!!!最最最核心代码  编写file
            XMLWriter writer = new XMLWriter(fos,format);
            writer.write(document);

            //注意最后的操作 关闭流
            writer.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


*XML文档解析
 * 解析:
         * 将某种数据格式里面的内容提取出来
         * 转化为我们可以使用的格式

//首先创建一个集合(或Map) 存放解析好的对象(数据)
        List<Book> books = new ArrayList<>();

        //找到要解析的文件
        File file = new File("xml_file/newXml3.xml");

        //SAX解析方式 创建解析用的对象
        SAXReader reader =new SAXReader();


        try {
            //读文件获取document对象
            Document document = reader.read(file);

            //解析原则 从外向里一层一层解析
            //获取根标签
            Element library = document.getRootElement();

            //getName 是获取标签的名字
            //System.out.println("根标签的名字是: " + library.getName());

            //attribute("desc").getData() 获取标签里的属性内容
            //System.out.println(library.attribute("desc").getData());

            //迭代器遍历!!!!
            //创建迭代器对象 都是Element类型的对象
            Iterator<Element> libraryIterator = library.elementIterator();

            //while循环
            while (libraryIterator.hasNext()) {
                //用于存放遍历以后的结果
                Book book = new Book();

                //获取子标签
                Element bookElement =libraryIterator.next();

                //获取子标签的名字
                //System.out.println(bookElement.getName());

                //获取子标签里面属性内容 key值
                //System.out.println(bookElement.attribute("type").getData());

                //创建子标签的迭代器对象
                Iterator<Element> bookIterator = bookElement.elementIterator();
                while (bookIterator.hasNext()) {

                    //获取孙子标签
                    Element element = bookIterator.next();
                   // System.out.println(element.getName());
                   // System.out.println(element.getData());

                    //判断子标签的名字
                    if (element.getName().equals("name")){
                        //获取对应子标签的内容
                        String name = element.getText();
                    //    System.out.println(name);

                        //将内容设置给book对象进行储存
                        book.setName(name);
                    }
                    if (element.getName().equals("kind")){
                        String kind = element.getText();
                        book.setKind(kind);
                    }
                    if (element.getName().equals("price")){
                        String price = element.getText();
                        book.setPrice(price);
                    }
                    if (element.getName().equals("num")){
                        String num = element.getText();
                        book.setNum(num);
                    }

                }
                books.add(book);
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }

        for (Book book : books) {
            System.out.println(book);
        }
    }
原文地址:https://www.cnblogs.com/luke-liuqi/p/9338761.html