DOM4J创建、修改和格式xml文件例子(转)

来源:互联网 发布:职业摔跤知乎 编辑:程序博客网 时间:2024/06/04 19:11
  1. import java.io.File;  
  2. import java.io.FileWriter;  
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5. import org.dom4j.Attribute;  
  6. import org.dom4j.Document;  
  7. import org.dom4j.DocumentHelper;  
  8. import org.dom4j.Element;  
  9. import org.dom4j.io.OutputFormat;  
  10. import org.dom4j.io.SAXReader;  
  11. import org.dom4j.io.XMLWriter;  
  12.   
  13. public class DOM4jDemo {  
  14.   
  15.     public int createXMLFile(String filename) {  
  16.   
  17.         int returnValue = 0;  
  18.   
  19.         Document document = DocumentHelper.createDocument();  
  20.   
  21.         Element booksElement = document.addElement("books");  
  22.   
  23.         booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");  
  24.   
  25.         Element bookElement = booksElement.addElement("book");  
  26.         /** 加入show属性内容 */  
  27.         bookElement.addAttribute("show""yes");  
  28.         /** 加入title节点 */  
  29.         Element titleElement = bookElement.addElement("title");  
  30.         /** 为title设置内容 */  
  31.         titleElement.setText("Dom4j Tutorials");  
  32.   
  33.         /** 类似的完成后两个book */  
  34.         bookElement = booksElement.addElement("book");  
  35.         bookElement.addAttribute("show""yes");  
  36.         titleElement = bookElement.addElement("title");  
  37.         titleElement.setText("Lucene Studing");  
  38.         bookElement = booksElement.addElement("book");  
  39.         bookElement.addAttribute("show""no");  
  40.         titleElement = bookElement.addElement("title");  
  41.         titleElement.setText("Lucene in Action");  
  42.   
  43.         /** 加入owner节点 */  
  44.         Element ownerElement = booksElement.addElement("owner");  
  45.         ownerElement.setText("O'Reilly");  
  46.         try {  
  47.             /** 将document中的内容写入文件中 */  
  48.             XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));  
  49.             writer.write(document);  
  50.             writer.close();  
  51.             /** 执行成功,需返回1 */  
  52.             returnValue = 1;  
  53.         } catch (Exception ex) {  
  54.             ex.printStackTrace();  
  55.         }  
  56.         return returnValue;  
  57.     }  
  58.   
  59.     /** 
  60.      * 修改XML文件中内容,并另存为一个新文件 重点掌握dom4j中如何添加节点,修改节点,删除节点 
  61.      *  
  62.      * @param filename 
  63.      *            修改对象文件 
  64.      * @param newfilename 
  65.      *            修改后另存为该文件 
  66.      * @return 返回操作结果, 0表失败, 1表成功 
  67.      */  
  68.     public int ModiXMLFile(String filename, String newfilename) {  
  69.         int returnValue = 0;  
  70.         try {  
  71.             SAXReader saxReader = new SAXReader();  
  72.             Document document = saxReader.read(new File(filename));  
  73.             /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */  
  74.             /** 先用xpath查找对象 */  
  75.             List list = document.selectNodes("/books/book/@show");  
  76.             Iterator iter = list.iterator();  
  77.             while (iter.hasNext()) {  
  78.                 Attribute attribute = (Attribute) iter.next();  
  79.                 if (attribute.getValue().equals("yes")) {  
  80.                     attribute.setValue("no");  
  81.                 }  
  82.             }  
  83.             /** 
  84.              * 修改内容之二: 把owner项内容改为Tshinghua 
  85.              * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type 
  86.              */  
  87.             list = document.selectNodes("/books/owner");  
  88.             iter = list.iterator();  
  89.             if (iter.hasNext()) {  
  90.                 Element ownerElement = (Element) iter.next();  
  91.                 ownerElement.setText("Tshinghua");  
  92.                 Element dateElement = ownerElement.addElement("date");  
  93.                 dateElement.setText("2004-09-11");  
  94.                 dateElement.addAttribute("type""Gregorian calendar");  
  95.             }  
  96.             /** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */  
  97.             list = document.selectNodes("/books/book");  
  98.             iter = list.iterator();  
  99.             while (iter.hasNext()) {  
  100.                 Element bookElement = (Element) iter.next();  
  101.                 Iterator iterator = bookElement.elementIterator("title");  
  102.                 while (iterator.hasNext()) {  
  103.                     Element titleElement = (Element) iterator.next();  
  104.                     if (titleElement.getText().equals("Dom4j Tutorials")) {  
  105.                         bookElement.remove(titleElement);  
  106.                     }  
  107.                 }  
  108.             }  
  109.             try {  
  110.                 /** 将document中的内容写入文件中 */  
  111.                 XMLWriter writer = new XMLWriter(new FileWriter(new File(  
  112.                         newfilename)));  
  113.                 writer.write(document);  
  114.                 writer.close();  
  115.                 /** 执行成功,需返回1 */  
  116.                 returnValue = 1;  
  117.             } catch (Exception ex) {  
  118.                 ex.printStackTrace();  
  119.             }  
  120.         } catch (Exception ex) {  
  121.             ex.printStackTrace();  
  122.         }  
  123.         return returnValue;  
  124.     }  
  125.   
  126.     /** 
  127.      * 格式化XML文档,并解决中文问题 
  128.      *  
  129.      * @param filename 
  130.      * @return 
  131.      */  
  132.     public int formatXMLFile(String filename) {  
  133.         int returnValue = 0;  
  134.         try {  
  135.             SAXReader saxReader = new SAXReader();  
  136.             Document document = saxReader.read(new File(filename));  
  137.             XMLWriter writer = null;  
  138.             /** 格式化输出,类型IE浏览一样 */  
  139.             OutputFormat format = OutputFormat.createPrettyPrint();  
  140.             /** 指定XML编码 */  
  141.             format.setEncoding("GBK");  
  142.             writer = new XMLWriter(new FileWriter(new File(filename)), format);  
  143.             writer.write(document);  
  144.             writer.close();  
  145.             /** 执行成功,需返回1 */  
  146.             returnValue = 1;  
  147.   
  148.         } catch (Exception ex) {  
  149.             ex.printStackTrace();  
  150.         }  
  151.   
  152.         return returnValue;  
  153.   
  154.     }  
  155.   
  156.     public static void main(String[] args) {  
  157.   
  158.         DOM4jDemo temp = new DOM4jDemo();  
  159.         System.out.println(temp.createXMLFile("f://holen.xml"));  
  160.         System.out.println(temp.ModiXMLFile("f://holen.xml""f://holen2.xml"));  
  161.         System.out.println(temp.formatXMLFile("f://holen2.xml"));  
  162.     }  
  163.   
  164. }  
0 0
原创粉丝点击