package testXMLTree;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
* java递归生成xml树形目录
*
*
*/
public class Testxml {
static List<TestNode> nodes = generateTreeNode();
public static void main(String[] args) throws IOException {
writeXml();
}
private static void writeXml() throws UnsupportedEncodingException,
FileNotFoundException, IOException {
Document document = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement("tree");
document.setRootElement(root);
for (int i = 0; i < nodes.size(); i++) {
TestNode node = nodes.get(i);
if (node.getParentId() == 0 || node.getNodeType() == 1) {
Element items = root.addElement("items");
items.addAttribute("name", node.getNodeName());
items.addAttribute("id", String.valueOf(node.getId()));
AddChildNode(items, node.getId());
}
}
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
ServletWebRequest servletWebRequest = new ServletWebRequest(request);
HttpServletResponse response = servletWebRequest.getResponse();
writeToFront(request, response, document.asXML());
writeToLocal(document);
}
private static void writeToFront(HttpServletRequest request,
HttpServletResponse response, String xml) throws Exception {
response.setContentType("text/xml; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(xml);
out.flush();
out.close();
}
public void writeToxml(HttpServletRequest request,HttpServletResponse response,Document document) throws UnsupportedEncodingException, IOException{
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml;charset=utf-8");
XMLWriter xw = new XMLWriter(response.getOutputStream(), format);
xw.write(document);
xw.flush();
xw.close();
}
private static void writeToLocal(Document document)
throws UnsupportedEncodingException, FileNotFoundException,
IOException {
OutputFormat format = new OutputFormat(" ", true);
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("F:/k.xml"),
format);
writer.write(document);
writer.flush();
writer.close();
}
private static void AddChildNode(Element items, int id) {
for (int i = 0; i < nodes.size(); i++) {
TestNode node = nodes.get(i);
if (node.getParentId() == id) {
Element item = items.addElement("item");
item.addAttribute("name", node.getNodeName());
item.addAttribute("id", String.valueOf(node.getId()));
AddChildNode(item, node.getId());
}
}
}
public static List<TestNode> generateTreeNode() {
List<TestNode> nodes = new ArrayList<TestNode>();
for (int i = 0; i < 10; i++) {
TestNode node = new TestNode();
node.setId(i + 1);
node.setParentId(i);
node.setNodeName("node" + i);
if (i % 2 == 0) {
node.setNodeType(1);
} else {
node.setNodeType(2);
}
nodes.add(node);
}
return nodes;
}
}