下载自定义的xml

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();
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值