zoukankan      html  css  js  c++  java
  • Dom4j解析XML

           Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4jAPI相对要复杂一些,但它提供了比JDOM更好的灵活性。

           Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j.

    使用Dom4j开发,需下载dom4j相应的jar文件。

    DOM4j中,获得Document对象的方式有三种:

      1.读取XML文件,获得document对象            

                       SAXReaderreader = new SAXReader();
     
                Document   document = reader.read(new File("input.xml"));

      2.解析XML形式的文本,得到document对象.

                     String text = "<members></members>";
                 Document document= DocumentHelper.parseText(text);

      3.主动创建document对象.

                    Document document= DocumentHelper.createDocument();
     
               //创建根节点

                      Element root = document.addElement("members");

    XML文档 book.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <书架>
      <书 name="工具书">
        <书名>Java就业培训教程</书名>  
        <售价>19元</售价>
        <作者>张孝祥</作者>  
        <售价>209元</售价>  
        <售价>19元</售价>
      </>  
      <>
        <书名>JavaScript网页开发</书名>  
        <作者>张孝祥</作者>  
        <售价>28.00元</售价>
      </>
    </书架>

    解析类Dom4jXml.java

    import java.io.FileOutputStream;
    import java.util.List;
    
    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 Dom4jXml {
        // 读取xml中元素属性值
        @Test
        public void read() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/book1.xml");
    
            Element root = document.getRootElement();
            Element bookname = root.element("书").element("书名");
            System.out.println(bookname.getText());
        }
    
        // 向xml文档中添加<售价>19元</售价>
        @Test
        public void add() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/book1.xml");
    
            Element price = DocumentHelper.createElement("售价");// DocumentHelper
                                                                // dom4j中创建标签的类
            price.setText("29元");
    
            document.getRootElement().element("书").add(price);
    
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
    
            XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
            writer.write(document);
    
            writer.close();
    
        }
    
        // 将xml文档中的<售价>29元</售价> 更新为<售价>39元</售价>
        @Test
        public void update() throws Exception {
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/book1.xml");
    
            Element price = (Element) document.getRootElement().element("书")
                    .elements("售价").get(0);//通过elements得到多个售价元素,使用get(i)方法得到要更新的节点
            price.setText("39元");
    
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
    
            XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
            writer.write(document);
    
            writer.close();
    
        }
        //删除xml指定元素属性
        @Test
        public void delete() throws Exception{
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/book1.xml");
            
            Element price = (Element) document.getRootElement().element("书")
            .elements("售价").get(0);
            price.getParent().remove(price);
            
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
    
            XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
            writer.write(document);
    
            writer.close();
        }
        //向指定位置添加元素
        @SuppressWarnings("unchecked")
        @Test
        public void adddir() throws Exception{
            SAXReader reader = new SAXReader();
            Document document = reader.read("src/book1.xml");
            
            Element price =DocumentHelper.createElement("售价");
            price.setText("45元");
            
            
            List list =document.getRootElement().element("书").elements();//用list得到<书>节点下所有元素
            list.add(2,price);//通过list.add(item,element)指定位置添加元素
        
            
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("UTF-8");
    
            XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"));
            writer.write(document);
    
            writer.close();
    
        }
    }
  • 相关阅读:
    数据结构(树链剖分):NOI2014 购票
    数据结构(树链剖分):COGS 2109. [NOIP2015] 运输计划
    数据结构(树链剖分,堆):HNOI 2016 network
    快速傅里叶变换(FFT):COGS 2216. 你猜是不是KMP
    生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
    数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo
    数位DP:SPOJ KPSUM
    动态规划(状态压缩):BZOJ 2621 [Usaco2012 Mar]Cows in a Skyscraper
    数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说
    生成树的计数(基尔霍夫矩阵):UVAoj 10766 Organising the Organisation SPOJ HIGH
  • 原文地址:https://www.cnblogs.com/lichone2010/p/3127849.html
Copyright © 2011-2022 走看看