DOM4J是JDOM項目的部分人員開發的另一個XML解析框架,與JDOM差不多。
創建XML文檔並在命令行輸出,同時輸出爲文件:
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.dom4j.io.OutputFormat;
- import org.dom4j.io.XMLWriter;
- public class Test1
- {
- public static void main(String[] args) throws Exception
- {
- //創建文檔並設置文檔的根元素節點:第一種方式
- // Document document = DocumentHelper.createDocument();
- //
- // Element root = DocumentHelper.createElement("student");
- //
- // document.setRootElement(root);
- //創建文檔並設置文檔的根元素節點:第二種方式
- Element root = DocumentHelper.createElement("student");
- Document document = DocumentHelper.createDocument(root);
- root.addAttribute("name", "zhangsan");
- Element helloElement = root.addElement("hello");
- Element worldElement = root.addElement("world");
- helloElement.setText("hello");
- worldElement.setText("world");
- helloElement.addAttribute("test", "haha");
- XMLWriter xmlWriter = new XMLWriter();
- xmlWriter.write(document);
- OutputFormat format = new OutputFormat(" ",true);
- XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream("student2.xml"),format);
- xmlWriter2.write(document);
- XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student3.xml"),format);
- xmlWriter3.write(document);
- xmlWriter3.flush();
- //
- }
- }
對一個已有xml進行解析
- import java.io.File;
- import java.util.Iterator;
- import java.util.List;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.DOMReader;
- import org.dom4j.io.SAXReader;
- public class Test2
- {
- public static void main(String[] args) throws Exception
- {
- SAXReader saxReader = new SAXReader();
- Document doc = saxReader.read(new File("student2.xml"));
- Element root = doc.getRootElement();
- System.out.println("root element:" + root.getName());
- List childList = root.elements();
- System.out.println(childList.size());
- List childList2 = root.elements("hello");
- System.out.println(childList2.size());
- Element first = root.element("hello");
- System.out.println(first.attributeValue("test"));
- for(Iterator iter = root.elementIterator();iter.hasNext();)
- {
- Element e = (Element)iter.next();
- System.out.println(e.attributeValue("test"));
- }
- System.out.println("---------------------");
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db = dbf.newDocumentBuilder();
- org.w3c.dom.Document document = db.parse(new File("student2.xml"));
- DOMReader domReader = new DOMReader();
- //將JAXP的Document轉換爲dom4j的Document
- Document d = domReader.read(document);
- Element rootElement = d.getRootElement();
- System.out.println(rootElement.getName());
- }
- }
DOMReader的read方法可以將JAXP的Document轉換爲dom4j的Document,然後使用dom4j的方法來進行解析。
如果你的myeclipse的工作空間文本文件的編碼方式爲默認(默認爲GBK),使用JDOM或dom4j的輸出方法默認輸出的xml文件編碼是utf-8,如果xml中有漢字,則將出現亂碼現象,好的作法是將工作空間的編碼格式改爲utf-8。