public void getTopoXml(HttpServletRequest request, HttpServletResponse response, String id) {
TopoInfoDto dto = getTopoInfo(id);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
Document document = builder.newDocument();
Element root = document.createElement("root");
document.appendChild(root);
Element areas = document.createElement("areas");
root.appendChild(areas);
List<TopoManageArea> topoManageAreas = dto.getAreas();
for (TopoManageArea area : topoManageAreas){
setInfoXml(area, TopoManageArea.class, areas, document);
}
Element points = document.createElement("points");
root.appendChild(points);
List<TopoPointWithoutXYDto> elements = dto.getPoints();
for(TopoPointWithoutXYDto element : elements){
setInfoXml(element, TopoPointWithoutXYDto.class, points, document);
}
Element lines = document.createElement("lines");
root.appendChild(lines);
List<TopoLineDto> relations = dto.getLines();
for(TopoLineDto relation : relations){
setInfoXml(relation, TopoLineDto.class, lines, document);
}
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
response.addHeader("Accept-Language", "zh-cn");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment; filename=topo.xml" );
transformer.transform(new DOMSource(document), new StreamResult(response.getOutputStream()));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取本类和父类的属性
* @param cz
* @return
*/
public Field[] getAllFields(Class cz){
Field[] fields = null;
Field[] selfFields = cz.getDeclaredFields();
// 获取父类的属性
Field[] superClassFields = cz.getSuperclass().getDeclaredFields();
int len = selfFields.length+superClassFields.length;
fields = new Field[len];
// 本类和父类属性赋值给fields
int selfLength = selfFields.length;
for (int i =0;i<selfLength;i++){
fields[i]=selfFields[i];
}
for (int i=0;i<superClassFields.length;i++){
fields[selfLength+i] = superClassFields[i];
}
return fields;
}
private void setInfoXml(Object info,Class cz,Element root, Document document) {
Field[] fields = null;
Element singleObj = null;
if ("TopoManageArea".equals(cz.getSimpleName())){
singleObj = document.createElement("area");
fields = cz.getDeclaredFields();
}else if ("TopoPointWithoutXYDto".equals(cz.getSimpleName())){
singleObj = document.createElement("point");
fields = getAllFields(cz);
}else {
singleObj = document.createElement("line");
fields = getAllFields(cz);
}
root.appendChild(singleObj);
for(Field field:fields) {
try {
Element name = document.createElement(field.getName());
field.setAccessible(true);
Object getValue = field.get(info);
Text value = document.createTextNode(getValue == null ? "": String.valueOf(getValue));
if (getValue!=null){
singleObj.appendChild(name);
name.appendChild(value);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
下载自定义的xml
最新推荐文章于 2024-06-20 18:00:24 发布