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);
}
}