DOM4J操作XML

来源:互联网 发布:网络工程师 知乎 编辑:程序博客网 时间:2024/05/16 17:45

 

 

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.Iterator;

 

 

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

 

 

publicclass operateXML {

   /**

    * 解析XML

    * @param fileName XMl名称

    */

   publicvoid parseXml(String fileName){

      //1.构建解析器SAXReader

      SAXReader reader = new SAXReader();

      

      Document doc =null;//声明document转换器

      try {

          //2.XML文件转换成document对象reader.read(filename);

          doc = reader.read(fileName);

      } catch (DocumentException e) {       

          e.printStackTrace();

      }

      //3.获得根元素getRootElement()

      Element root = doc.getRootElement();

      

      //4.遍历元素集合root.elementIterator()

      //Iterator<Element> iter= root.elementIterator();

      

      for (Iterator<Element> iter =root.elementIterator();iter.hasNext();){

          Element element = iter.next();

          String fruit = element.attributeValue("fruit");//获取子元素标签

          String name = element.elementText("name");//获取name属性的值

          String color = element.elementText("color");//获取color属性的值

 

          //答应输出信息

          System.out.println("节点:"+fruit);

          System.out.println("name:"+name);

          System.out.println("color:"+color);

          System.out.println("---------------------");

      }

   }

   

   /**

    * 生成XML

    * @param filenamexml文件名

    */

   publicvoid createXML(String filename){

      //1. 使用DocumentHelper.createDocument()构建一个  dom4jdocument对象

      Document doc = DocumentHelper.createDocument();

      //2.从根节点开始构建节点和树形结构

      Element root = doc.addElement("fruits");

      

      Element fruit1=root.addElement("fruit");

      fruit1.addAttribute("fruitNo","1");//设置属性

      fruit1.addElement("name").addText("苹果");

      fruit1.addElement("color").addText("红色");

      

      Element fruit2=root.addElement("fruit");

      fruit2.addAttribute("fruitNo","2");//设置属性

      fruit2.addElement("name").addText("橙子");

      fruit2.addElement("color").addText("橙色");

      

      //3.设置格式OutputFormat

      OutputFormat format = OutputFormat.createCompactFormat();

      format.setEncoding("UTF-8");

      

      //4.实例化一个XMLWriter输出对象,打开输出流

      XMLWriter out= null;

      try {

          out = new XMLWriter(new FileOutputStream(filename),format);

      } catch (UnsupportedEncodingException e) {

          e.printStackTrace();

      } catch (FileNotFoundException e) {

          e.printStackTrace();

      }

      //5. document对象输出到xml文件out.write(doc);

      try {

          out.write(doc);

      } catch (IOException e) {

          e.printStackTrace();

      }finally{

          //6.关闭输出流out.close();

          try {

             out.close();

          } catch (IOException e) {

             e.printStackTrace();

          }

      }

 

   }

   /**

    * 修改XML

    * @param filenamexml名称

    */

   publicvoid modifyXML(String filename){

      //构建解析器SAXReader

      SAXReader reader = new SAXReader();

      

      Document doc =null;//声明document转换器

      try {

          //2.XML文件转换成document对象reader.read(filename);

          doc = reader.read(filename);

      } catch (DocumentException e) {       

          e.printStackTrace();

      }

      //3.获得根元素getRootElement()

      Element root = doc.getRootElement();

      

      //4.遍历元素集合root.elementIterator()

      for(Iterator<Element> iter =root.elementIterator();iter.hasNext();){

          Element fruit = iter.next();

          

          //5.修改文本内容或属性值

          if(fruit.elementText("name").equals("苹果")){

             //fruit.selectSingleNode("color").setText("青色");

             //Element name =fruit.getChild("name");

             //name.setText("苹果");

             

             fruit.element("color").setText("青色");

             fruit.remove(fruit.attribute("fruitNo"));

          }

      }

      

      //6.设置格式OutputFormat

      OutputFormat format = OutputFormat.createCompactFormat();

      format.setEncoding("UTF-8");

 

      //7.实例化一个XMLWriter输出对象,打开输出流

      XMLWriter out = null;

      try {

          out = new XMLWriter(new FileOutputStream(filename),format);

      } catch (UnsupportedEncodingException e) {

          e.printStackTrace();

      } catch (FileNotFoundException e) {

          e.printStackTrace();

      }

      

      //8. document对象输出到xml文件out.write(doc);

      try {

          out.write(doc);

      } catch (IOException e) {

          e.printStackTrace();

      }finally{

          //9.关闭输出流out.close();

          try {

             out.close();

          } catch (IOException e) {

             e.printStackTrace();

          }

      }

   }

   

   publicstaticvoid main(String[] args) {

      //实例化操作xml对象

      operateXML op = new operateXML();

      //解析XML

      op.parseXml("fruit.xml");

      //创建XML

      op.createXML("fruits.xml");

      //修改XML

      op.modifyXML("fruit.xml");

      //解析XML

      op.parseXml("fruit.xml");

      

   }

}

 

 

原创粉丝点击