(转)Dom4J解析

xml文档:

<?xml version="1.0" encoding="UTF-8"?>

<书架> 
  <书 出版社="清华"> 
    <书名>Java就业培训教程</书名>  
    <出版社></出版社>
    <出版社>清华</出版社>  
    <售价>50.00元</售价>  
    <内部价>40.99元</内部价>  
    <作者>刘清华</作者> 
  </>  
  <> 
    <书名>JavaScript网</书名>  
    <作者>张孝祥</作者>  
    <售价>28.00元</售价> 
  </> 
</书架>  

 代码演示:

package test.java;
/** 
 * @author lxw 
 * @date 2016年9月6日 下午10:01:55 
 * @describe 
 */
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
public class Dom4JParser {
   //测试
   public static void main(String[] args) throws Exception {
      test08();
   }
   //1、获得某个节点的具体内容 >> 获取第2本书的 【书名】
   public static void test01() throws Exception{
      //1.获取解析器
      SAXReader reader = new SAXReader();
      //2.加载XML文档
      Document document = reader.read("src/book.xml");
      //3.获取根元素
      Element root = document.getRootElement();
      //4.找第二本书的元素
      Element book = (Element)root.elements("书").get(1);
      Element name = book.element("书名");
      // 测试+打印
      System.out.println("第2本书的书名是:"+name.getText());
   }
   //2、遍历所有的元素节点,打印元素的名称
   public static void test02() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      treeWalk(root);
     
     
   }
   //2.1  递归遍历
   public static void treeWalk(Element element){
      //打印元素的名字
      System.out.println(element.getName());
      //获取该元素,孩子Node的个数
      int size = element.nodeCount();
      //循环遍历
      for (int i = 0; i < size; i++) {
         //取出第i个 孩子节点
         Node node = element.node(i);
         if (node.getNodeType() == Node.ELEMENT_NODE) {
            treeWalk((Element)node);
         }
      }
   }
   //3.修改xml的主体内容 》》修改第一本书的【作者】
   public static void test03() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到作者
      Element element = (Element)root.elements("书").get(0);
      //2.修改 主题内容
      element.element("作者").setText("刘清华");
      //3.更新XML文档
      OutputFormat format = OutputFormat.createPrettyPrint();
      format.setEncoding("UTF-8");//设置格式化编码
      //默认编码就是 【UTF-8】
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //4.增加一个节点 》》第1本书 增加 【内部价】
   public static void test04() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书
      Element book1 = root.element("书"); //默认 是 第1本  ,相当于  elements(“书”).get(0);
      //2.新建一个 节点
      Element price = DocumentHelper.createElement("作者");
      price.setText("sts");
      //3.添加
      book1.add(price);
      //4.更新XML文档
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //5.在指定位置添加一个元素节点    》》 第一本书,作者前,增加 【出版社】
   public static void test05() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书的集合列表
      List book1 = root.element("书").elements(); //默认 是 第1本  ,相当于  elements(“书”).get(0);
      //2.新建一个 节点
      Element chuban = DocumentHelper.createElement("出版社");
      chuban.setText("华");
      //3.在list中指定位置,添加
      book1.add(1,chuban);
      //4.更新XML文档
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //6.删除指定元素节点
   private static void test06()throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书的作者
      Element book1 = root.element("书");
      Element author = book1.element("作者");
      //2.由父亲删儿子
      book1.remove(author);
      //3.更新XML文档
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
      writer.write(document);
      writer.close();
   }
   //7.对元素属性的操作
   private static void test07()throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      Element root = document.getRootElement();
      //1.找到第一本书
      Element book1 = root.element("书");
      //2.显示属性的内容
      System.out.println(book1.attributeValue("出版社"));
   }
   //8.将xml转换成String
   private static void test08() throws Exception{
      SAXReader reader = new SAXReader();
      Document document = reader.read("src/book.xml");
      //XML转换成字符串
      String text = document.asXML();
      System.out.println(text);
   }
   //9.将String 转换成为 xml
   private static void test09() throws Exception{
      String text = "<person><name>刘清华</name></person>";
      Document document = DocumentHelper.parseText(text);
     
      //格式化器,使XML更规范
      OutputFormat format = OutputFormat.createPrettyPrint();
      XMLWriter writer = new XMLWriter(new FileOutputStream("D:/test.xml"),format);
      writer.write(document);
      writer.close();
   }
}
 
原文地址:https://www.cnblogs.com/lixuwu/p/5847621.html