现在的位置: 首页 > 综合 > 正文

9、DOM4J详解

2018年02月05日 ⁄ 综合 ⁄ 共 2739字 ⁄ 字号 评论关闭

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.

【上篇】
【下篇】

抱歉!评论已关闭.