(九)XML之DOM4J詳解

DOM4J是JDOM項目的部分人員開發的另一個XML解析框架,與JDOM差不多。

 

創建XML文檔並在命令行輸出,同時輸出爲文件:

[java] view plain copy
  1. import java.io.FileOutputStream;  
  2. import java.io.FileWriter;  
  3. import java.io.IOException;  
  4.   
  5. import org.dom4j.Document;  
  6. import org.dom4j.DocumentHelper;  
  7. import org.dom4j.Element;  
  8. import org.dom4j.io.OutputFormat;  
  9. import org.dom4j.io.XMLWriter;  
  10.   
  11. public class Test1  
  12. {  
  13.     public static void main(String[] args) throws Exception  
  14.     {  
  15.         //創建文檔並設置文檔的根元素節點:第一種方式  
  16. //      Document document = DocumentHelper.createDocument();  
  17. //        
  18. //      Element root = DocumentHelper.createElement("student");  
  19. //        
  20. //      document.setRootElement(root);  
  21.           
  22.         //創建文檔並設置文檔的根元素節點:第二種方式  
  23.         Element root = DocumentHelper.createElement("student");  
  24.         Document document = DocumentHelper.createDocument(root);  
  25.           
  26.         root.addAttribute("name""zhangsan");  
  27.         Element helloElement = root.addElement("hello");  
  28.         Element worldElement = root.addElement("world");  
  29.           
  30.         helloElement.setText("hello");  
  31.         worldElement.setText("world");  
  32.           
  33.         helloElement.addAttribute("test""haha");  
  34.           
  35.         XMLWriter xmlWriter = new XMLWriter();  
  36.         xmlWriter.write(document);  
  37.           
  38.         OutputFormat format = new OutputFormat("    ",true);  
  39.         XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream("student2.xml"),format);  
  40.         xmlWriter2.write(document);  
  41.           
  42.         XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student3.xml"),format);  
  43.         xmlWriter3.write(document);  
  44.         xmlWriter3.flush();  
  45.         //  
  46.     }  
  47. }  


對一個已有xml進行解析

[java] view plain copy
  1. import java.io.File;  
  2. import java.util.Iterator;  
  3. import java.util.List;  
  4.   
  5. import javax.xml.parsers.DocumentBuilder;  
  6. import javax.xml.parsers.DocumentBuilderFactory;  
  7. import javax.xml.parsers.ParserConfigurationException;  
  8.   
  9. import org.dom4j.Document;  
  10. import org.dom4j.DocumentException;  
  11. import org.dom4j.Element;  
  12. import org.dom4j.io.DOMReader;  
  13. import org.dom4j.io.SAXReader;  
  14.   
  15. public class Test2  
  16. {  
  17.     public static void main(String[] args) throws Exception  
  18.     {  
  19.         SAXReader saxReader = new SAXReader();  
  20.         Document doc = saxReader.read(new File("student2.xml"));  
  21.           
  22.         Element root = doc.getRootElement();  
  23.         System.out.println("root element:" + root.getName());  
  24.           
  25.         List childList = root.elements();  
  26.         System.out.println(childList.size());  
  27.           
  28.         List childList2 = root.elements("hello");  
  29.         System.out.println(childList2.size());  
  30.           
  31.         Element first = root.element("hello");  
  32.         System.out.println(first.attributeValue("test"));  
  33.           
  34.         for(Iterator iter = root.elementIterator();iter.hasNext();)  
  35.         {  
  36.             Element e = (Element)iter.next();  
  37.             System.out.println(e.attributeValue("test"));  
  38.         }  
  39.         System.out.println("---------------------");  
  40.           
  41.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  42.         DocumentBuilder db = dbf.newDocumentBuilder();  
  43.         org.w3c.dom.Document document = db.parse(new File("student2.xml"));  
  44.           
  45.         DOMReader domReader = new DOMReader();  
  46.           
  47.         //將JAXP的Document轉換爲dom4j的Document  
  48.         Document d = domReader.read(document);  
  49.           
  50.         Element rootElement = d.getRootElement();  
  51.         System.out.println(rootElement.getName());  
  52.           
  53.           
  54.         }  
  55.     }  


DOMReader的read方法可以將JAXP的Document轉換爲dom4j的Document,然後使用dom4j的方法來進行解析。

如果你的myeclipse的工作空間文本文件的編碼方式爲默認(默認爲GBK),使用JDOM或dom4j的輸出方法默認輸出的xml文件編碼是utf-8,如果xml中有漢字,則將出現亂碼現象,好的作法是將工作空間的編碼格式改爲utf-8。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章