天天看点

Dom4j的常用操作

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

@SuppressWarnings("all")
public class Dom4j {
	public static void main(String[] args) throws Exception {
		Dom4j dom = new Dom4j();
		Document doc = dom.read("src/books.xml");
		Element root = doc.getRootElement();
		root.accept(new MyVisitor()); // 用访问器迭代节点

		// Document html = dom.read("src/link.html");
	}

	// 创建Document
	public Document read(String fileName) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(fileName));
		return document;
	}

	public Element getRootElement(Document doc) {
		return doc.getRootElement();
	}

	public void iterator(Element root) {
		// 枚举所有子节点
		for (Iterator i = root.elementIterator(); i.hasNext();) {
			Element element = (Element) i.next();
		}

		for (Iterator i = root.attributeIterator(); i.hasNext();) {
			Attribute element = (Attribute) i.next();
		}
	}

	// 迭代元素
	public void treeWalk(Element element) {
		for (int i = 0, size = element.nodeCount(); i < size; i++) {
			Node node = element.node(i);
			if (node instanceof Element) {
				treeWalk((Element) node);
			} else {

			}
		}
	}

	public void bar(Document document) {
		List list = document.selectNodes("//foo/bar");
		Node node = document.selectSingleNode("//foo/bar/author");
		String name = node.valueOf("@name");
	}

	// 查找HTML中的所有超级链接
	public void findLinks(Document document) {
		List list = document.selectNodes("//a/@href");
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			Attribute attr = (Attribute) iter.next();
			String url = attr.getValue();
		}
	}

	public Document styleDocument(Document document, String stylesheet) throws Exception {
		TransformerFactory factory = TransformerFactory.newInstance();
		Transformer transformer = factory.newTransformer(new StreamSource(stylesheet));

		DocumentSource source = new DocumentSource(document);
		DocumentResult result = new DocumentResult();
		transformer.transform(source, result);

		Document transformDocument = result.getDocument();

		return transformDocument;
	}

	// 创建文档
	public Document createDocument() {
		Document document = DocumentHelper.createDocument();
		Element root = document.addElement("root");
		Element author = root.addElement("author").addAttribute("name", "James")
		.addAttribute("country", "UK").addText("James Strachan");
		return document;
	}

	// 输出XML
	public void write(Document document) throws IOException {
		XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
		writer.write(document);
		writer.close();

		// 美化格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		writer = new XMLWriter(System.out, format);
		writer.write(document);
		// 缩紧格式
		format = OutputFormat.createCompactFormat();
		writer = new XMLWriter(System.out, format);
		writer.write(document);
	}
}