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.