import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
private static void writerXML() {
try {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
// 生成一个根节点
Element root = doc.createElement("errors");
doc.appendChild(root);
// 循环第一层节点
for (FileError fileError : errors) {
Element file = doc.createElement("file");
file.setAttribute("name", fileError.getFileName());
root.appendChild(file);
// 循环第二层节点
for (String errorInfo : fileError.getErrors()) {
Element error = doc.createElement("error");
file.appendChild(error);
Text txError = doc.createTextNode(errorInfo);
error.appendChild(txError);
}
}
// dom 转换成xml
Transformer transformer = TransformerFactory.newInstance().newTransformer();
Properties properties = transformer.getOutputProperties();
properties.setProperty(OutputKeys.ENCODING, "GB2312");
properties.setProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperties(properties);
DOMSource source = new DOMSource(doc);
File file = new File("d:\\logger.xml");
StreamResult result = new StreamResult(file);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
// 实体类
public class FileError {
private String fileName;
private List<String> errors;
public FileError(String fileName, List<String> errors) {
this.fileName = fileName;
this.errors = errors;
}
public List<String> getErrors() {
return errors;
}
public void setErrors(List<String> errors) {
this.errors = errors;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
// 生成的xml
<?xml version="1.0" encoding="GB2312"?>
<errors>
<file name="test1.java">
<error>line 176 应该是调试信息,不应该打印为Error信息</error>
</file>
<file name="test2.java">
<error>line 489 应该是调试信息,不应该打印为Error信息</error>
<error>line 521 应该是调试信息,不应该打印为Error信息</error>
</file>
</errors>