zoukankan      html  css  js  c++  java
  • dom4j的小例子

    1.要解析的xml文件book.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    	<book id="book1">
    		<title>JAVA编程思想</title>
    		<price>80.00</price>
    	</book>
    	<book id="book2">
    		<title>JAVA核心技术</title>
    		<price>100.00</price>
    	</book>
    </books>
    

     2.解析xml文件

    package com.chen.dom;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.OutputStreamWriter;
    import java.util.Iterator;
    import java.util.List;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    import org.junit.Test;
    
    public class Dom4jTest {
        @Test
        public void read() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("resource/book.xml"));
            Element root = document.getRootElement();
            Element book1 = (Element) root.elements("book").get(0);
            String id1 = book1.attributeValue("id");
            String titleText = book1.element("title").getTextTrim();
            System.out.println(id1 + "---" + titleText);
        }
    
        /*
         * 将整个xml使用递归完整输出
         */
        @Test
        public void readIterator() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("resource/book.xml"));
            Element root = document.getRootElement();
            // 递归解析xml
            parse(root);
    
        }
    
        // 递归解析xml
        public void parse(Element element) {
            System.out.print("<" + element.getName());
            // 遍历节点的属性
            List<Attribute> attributes = element.attributes();
            for (int i = 0; i < attributes.size(); i++) {
                Attribute attr = attributes.get(i);
                String name = attr.getName();
                String value = attr.getValue();
                System.out.print(" " + name + "="" + value + """);
            }
            System.out.println(">");
            // 获取节点的文本信息
            if (element.getTextTrim() != null && !"".equals(element.getTextTrim())) {
                System.out.println(element.getTextTrim());
            }
            // 对该节点进行递归
            for (Iterator i = element.elementIterator(); i.hasNext();) {
                parse((Element) i.next());
            }
            System.out.println("</" + element.getName() + ">");
        }
    
        @Test
        public void add() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("resource/book.xml"));
            Element root = document.getRootElement();
            Element book1 = (Element) root.elements("book").get(1);
            Element authorElement = book1.addElement("author")
                    .addAttribute("id", "author2").addText("张三");
            
            
            OutputFormat format = OutputFormat.createPrettyPrint();
            //从这里可以看出dom4j默认的编码方式为utf-8
            System.out.println(format.getEncoding());
            //设置编码格式防止乱码   <?xml version="1.0" encoding="gb2312"?> 
            format.setEncoding("utf-8");
            
            //使用FileWriter会乱码,因为使用了默认的gb2312编码输出,而dom4j使用的是默认的UTF-8编码
            //如果format.setEncoding("gb2312"); 使用FileWriter就不会乱码
            //XMLWriter writer = new XMLWriter(new FileWriter("resource/book.xml"),format);
            
            //使用FileOutputStream输出时指定编码  这个编码要和format.setEncoding("utf-8"); 一样
            //XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("resource/book.xml"), "utf-8"),format);
            //最简单的方法是设置format.setEncoding("utf-8");然后使用字节流输出
            XMLWriter writer = new XMLWriter(new FileOutputStream("resource/book.xml"),format);
            
            writer.write(document);
            writer.close();
        }
    
        
        //在指定位置上添加个新节点(改变list集合的顺序)
        @Test
        public void add2() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("resource/book.xml"));
            Element element = document.getRootElement().element("book");
            List list = element.elements();
            Element publishElement = DocumentHelper.createElement("publish");
            publishElement.addText("机械工业出版社");
            //改变list集合的顺序,就可以达到在指定位置添加新节点
            list.add(1, publishElement);
            
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("utf-8");
            
            XMLWriter writer = new XMLWriter(new FileOutputStream("resource/book.xml"),format);
            writer.write(document);
            writer.close();
        }
    }

    xml乱码的样子:

  • 相关阅读:
    ubuntu安装KVM
    从磁盘上卸载虚拟机安装的系统,彻底删除虚拟机
    VIM退出命令
    ubuntu修改IP地址和网关的方法
    linux 创建连接命令 ln -s 软链接
    OVF? OVA? VMDK? – File Formats and Tools for Virtualization
    How to: Launch the Debugger Automatically
    winform listview默认第一项光标选中
    基于TCP通信的客户端断线重连
    客户端程序传送图片到服务器
  • 原文地址:https://www.cnblogs.com/chenxiaocai/p/5880171.html
Copyright © 2011-2022 走看看