• dom4j建立,修改XML文档,并解决格式化输出和中文【转】


      1 package com.holen.dom4j;
      2 import java.io.File;
      3 import java.io.FileWriter;
      4 import java.util.Iterator;
      5 import java.util.List;
      6 import org.dom4j.Attribute;
      7 import org.dom4j.Document;
      8 import org.dom4j.DocumentHelper;
      9 import org.dom4j.Element;
     10 import org.dom4j.io.OutputFormat;
     11 import org.dom4j.io.SAXReader;
     12 import org.dom4j.io.XMLWriter;
     13 /**
     14  * @author Holen Chen
     15  */
     16 public class Dom4jDemo {
     17    
     18     public Dom4jDemo() {
     19     }
     20    
     21     /**
     22      * 建立一个XML文档,文档名由输入参数决定
     23      * @param filename 需建立的文件名
     24      * @return 返回操作结果, 0表失败, 1表成功
     25      */
     26     public int createXMLFile(String filename){
     27        /** 返回操作结果, 0表失败, 1表成功 */
     28        int returnValue = 0;
     29        /** 建立document对象 */
     30         Document document = DocumentHelper.createDocument();
     31        /** 建立XML文档的根books */
     32         Element booksElement = document.addElement("books");
     33        /** 加入一行注释 */
     34         booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
     35        /** 加入第一个book节点 */
     36         Element bookElement = booksElement.addElement("book");
     37        /** 加入show参数内容 */
     38         bookElement.addAttribute("show","yes");
     39        /** 加入title节点 */
     40         Element titleElement = bookElement.addElement("title");
     41        /** 为title设置内容 */
     42         titleElement.setText("Dom4j Tutorials");
     43       
     44        /** 类似的完成后两个book */
     45         bookElement = booksElement.addElement("book");
     46         bookElement.addAttribute("show","yes");
     47         titleElement = bookElement.addElement("title");
     48         titleElement.setText("Lucene Studing");
     49         bookElement = booksElement.addElement("book");
     50         bookElement.addAttribute("show","no");
     51         titleElement = bookElement.addElement("title");
     52         titleElement.setText("Lucene in Action");
     53       
     54        /** 加入owner节点 */
     55         Element ownerElement = booksElement.addElement("owner");
     56         ownerElement.setText("O'Reilly");
     57       
     58        try{
     59            /** 将document中的内容写入文件中 */
     60            XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
     61            writer.write(document);
     62            writer.close();
     63            /** 执行成功,需返回1 */
     64            returnValue = 1;
     65         }catch(Exception ex){
     66            ex.printStackTrace();
     67        }
     68               
     69         return returnValue;
     70     }
     71    
     72     /**
     73      * 修改XML文件中内容,并另存为一个新文件
     74      * 重点掌握dom4j中如何添加节点,修改节点,删除节点
     75      * @param filename 修改对象文件
     76      * @param newfilename 修改后另存为该文件
     77      * @return 返回操作结果, 0表失败, 1表成功
     78      */
     79     public int ModiXMLFile(String filename,String newfilename){
     80        int returnValue = 0;
     81        try{
     82            SAXReader saxReader = new SAXReader();   
     83            Document document = saxReader.read(new File(filename));
     84            /** 修改内容之一:如果book节点中show参数的内容为yes,则修改成no */
     85            /** 先用xpath查找对象 */
     86            List list = document.selectNodes("/books/book/@show" );   
     87            Iterator iter = list.iterator();
     88            while(iter.hasNext()){
     89                Attribute attribute = (Attribute)iter.next();
     90                if(attribute.getValue().equals("yes")){
     91                    attribute.setValue("no");
     92                }  
     93            }
     94           
     95            /**
     96             * 修改内容之二:把owner项内容改为Tshinghua
     97             * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个参数type
     98             */
     99            list = document.selectNodes("/books/owner" );
    100            iter = list.iterator();
    101            if(iter.hasNext()){
    102                Element ownerElement = (Element)iter.next();
    103                ownerElement.setText("Tshinghua");
    104                Element dateElement = ownerElement.addElement("date");
    105                dateElement.setText("2004-09-11");
    106                dateElement.addAttribute("type","Gregorian calendar");
    107            }
    108           
    109            /** 修改内容之三:若title内容为Dom4j Tutorials,则删除该节点 */
    110            list = document.selectNodes("/books/book");
    111            iter = list.iterator();
    112            while(iter.hasNext()){
    113                Element bookElement = (Element)iter.next();
    114                Iterator iterator = bookElement.elementIterator("title");
    115                while(iterator.hasNext()){
    116                    Element titleElement=(Element)iterator.next();
    117                    if(titleElement.getText().equals("Dom4j Tutorials")){
    118                       bookElement.remove(titleElement);
    119                   }
    120                }
    121            }          
    122           
    123            try{
    124                /** 将document中的内容写入文件中 */
    125                XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));
    126                writer.write(document);
    127                writer.close();
    128                /** 执行成功,需返回1 */
    129                returnValue = 1;
    130            }catch(Exception ex){
    131                ex.printStackTrace();
    132            }
    133           
    134         }catch(Exception ex){
    135            ex.printStackTrace();
    136        }
    137         return returnValue;
    138     }
    139    
    140     /**
    141      * 格式化XML文档,并解决中文问题
    142      * @param filename
    143      * @return
    144      */
    145     public int formatXMLFile(String filename){
    146        int returnValue = 0;
    147        try{
    148            SAXReader saxReader = new SAXReader();   
    149            Document document = saxReader.read(new File(filename));
    150            XMLWriter output = null;
    151            /** 格式化输出,类型IE浏览一样 */
    152            OutputFormat format = OutputFormat.createPrettyPrint();
    153            /** 指定XML字符集编码 */
    154            format.setEncoding("GBK");
    155            output = new XMLWriter(new FileWriter(new File(filename)),format);
    156            output.write(document);
    157            output.close();       
    158            /** 执行成功,需返回1 */
    159            returnValue = 1;      
    160         }catch(Exception ex){
    161            ex.printStackTrace();
    162        }
    163         return returnValue;
    164     }
    165     public static void main(String[] args) {
    166         Dom4jDemo temp = new Dom4jDemo();
    167         System.out.println(temp.createXMLFile("d://holen.xml"));
    168         System.out.println(temp.ModiXMLFile("d://holen.xml","d://holen2.xml"));
    169         System.out.println(temp.formatXMLFile("d://holen2.xml"));
    170     }
    171 }
  • 相关阅读:
    矩阵乘法与邻接矩阵
    矩阵加速 学习笔记
    P5596 【XR-4】题
    P1842 奶牛玩杂技
    CF449B Jzzhu and Cities
    小球与盒子
    [JZOJ5279]香港记者题解--最短路图
    [学习笔记]二分图匹配与匈牙利算法
    [NOIP2018模拟赛10.25]瞎搞报告
    luogu2657-Windy数题解--数位DP
  • 原文地址:https://www.cnblogs.com/macula/p/2617185.html
Copyright © 2020-2023  润新知