分享

Sring与xml之间转换

 厶汀 2013-10-25
//Document docData = DocumentHelper.parseText(bodyPack);将string转换成xml类型
//注:在使用Dom4j的时候,有时候需要将一个Document对象转换为一个String,可以直接调用Document.asXML()方法来实现。可是调用这个方法的结果是:生成的字符串按照UTF-8进行了重新编码。这样,如果之前你的xml编码为GBK,那么你的调用此方法后,编码就变为UTF-8了,输出的中文字符就发生乱码。
下面看看解决方案:
 
首先读入文件为String:
        InputStream in = IssuePlan.class.getClassLoader().getResourceAsStream("temp/test.xml"); 
        if (in == null) { 
                log.info("没有找到temp/test.xml"); 
        } 
        String xml = StringFileToolkit.stream2String(in, charset); 
        Document doc = null
        try { 
                doc = DocumentHelper.parseText(xml); 
                doc.setXMLEncoding(charset); 
        } catch (DocumentException e) { 
                e.printStackTrace(); 
                log.error("XML格式错误,请检查temp/test.xml是否存在于Classpath下以及合理性!"); 
                throw new Exception(e); 
        } 
 
这里将XML忠实的按照原有的编码读取出来了,注意,读取出来后,立即对doc对象指定编码,否则会按照操作系统默认的编码处理。
 
如果你在此处调用doc.asXML(),那么,就得到了这个XML文件UTF-8的编码,如果之间不是UTF-8,那么这样编码是错误的。
 
因此,要导出合理编码的字符串,还要调用格式方法,这个方法是我自己写的:
        /** 
         * 格式化XML文档 
         * 
         * @param document xml文档 
         * @param charset    字符串的编码 
         * @return 格式化后XML字符串 
         */
 
        public static String formatXML(Document document, String charset) { 
                OutputFormat format = OutputFormat.createPrettyPrint(); 
                format.setEncoding(charset); 
                StringWriter sw = new StringWriter(); 
                XMLWriter xw = new XMLWriter(sw, format); 
                try { 
                        xw.write(document); 
                        xw.flush(); 
                        xw.close(); 
                } catch (IOException e) { 
                        log.error("格式化XML文档发生异常,请检查!", e); 
                } 
                return sw.toString(); 
        }
 
你可以随意指定编码,但是你调用之前必须保证你的字符串编码和这里参数的编码一致,这样才是正确的调用。
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多