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乱码的样子:

  • 相关阅读:
    尝试在mac上用dotnet cli运行asp.net core示例程序
    帅呆了!ASP.NET Core每秒能处理115万个请求
    EF(Entity Framework)多对多关系下用LINQ实现"NOT IN"查询
    前端工程师和设计师必读文章推荐【系列三十四】
    Plyr – 简单,灵活的 HTML5 媒体播放器
    20种新颖的按钮风格和效果【附源码下载】
    12款最佳的 WordPress 语法高亮插件推荐
    MaterialUp
    React Native – 使用 JavaScript 开发原生应用
    推荐15款创建漂亮幻灯片的 jQuery 插件
  • 原文地址:https://www.cnblogs.com/chenxiaocai/p/5880171.html
Copyright © 2011-2022 走看看