在使用JSon-Lib库进行XML2JSon的转换时,在JUnit测试时没有什么问题,但是在Tomcat里面跑的时候,抛出了下面的异常,查找了google,发现关于这方便的文章比较少,即使有,也需要翻墙去查找,于是就自己记录下来,以便后面的人查找翻遍。

net.sf.json.JSONException: nu.xom.ParsingException: Element type "鍥句功娴侀" must be followed by either attribute specifications, ">" or "/>". at line 1, column 46

找到最原始的一个文章连接是下面的链接,上面说明了,在不同的环境上面,在转换中文的时候,出现了使用不同的编码集导致了问题。

http://www.codeweblog.com/transfer-element-type-must-be-followed-by-either-attribute-specifications/

知道了问题的所在,但是依然不知道如何解决。于是又搜索到了一位大侠的文章《[转]Element Type Must Be Followed By Either Attribute Specifications, “>”

http://newwhx2011.iteye.com/blog/1121201

在这片文章里面,明确说了【关于new XMLSerializer().readFromFile()在读取文件内容时,从字节流转换为字符流时并没有指定编码,此处应该是json-lib代码的Bug。】,于是查看了XMLSerializer的代码,发现确实是在转换的时候,没有指定编码,于是按照他提供的思路,进行了编码,也就是自己指定编码处理。

原来的代码:

       public static String xml2json(File xmlFile) throws Exception {
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.readFromFile(xmlFile);
return json.toString(2);
}

更改后的代码,也就是把原来XMLSerializer里面的代码copy出来,同时加了一个编码的设置,现在一切都正常了

    public static String xml2json(File xmlFile) throws Exception {

        JSON json = readFromStream(new FileInputStream(xmlFile));
return json.toString(2);
} public static JSON readFromStream(InputStream stream) throws Exception {
StringBuffer xml = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(stream,"UTF-8"));
String line = null;
while ((line = in.readLine()) != null) {
xml.append(line);
}
XMLSerializer xmlSerializer = new XMLSerializer();
return xmlSerializer.read(xml.toString());
}

最新文章

  1. C 标准库系列之概述
  2. 关于IOS显示图片的一些注意事项
  3. 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解
  4. 探秘空值位图掩码(NULL bitmap mask)
  5. JavaScript Patterns 3.7 Primitive Wrappers
  6. hdu 4393 优先队列
  7. 通过UserAgent判断智能手机(设备,Android,IOS)
  8. php判断用户客户端是否是微信内置客户端
  9. C#序列化XML至对象
  10. ASP.NET中上传并读取Excel文件数据
  11. Xcode 8 用处不大的新特性:CLANG_WARN_INFINITE_RECURSION
  12. XP下类似%windir% %userprofile% 的变量的说明(转)
  13. R语言︱ROC曲线——分类器的性能表现评价
  14. [Java算法分析与设计]--单向链表(List)的实现和应用
  15. python 库位置
  16. RMAN备份filesperset用法
  17. Dart学习-操作符
  18. 比sort()性能更好的原生js代码实现数组从小到大排序
  19. LeetCode算法题-Count Primes(Java实现)
  20. mysql加密函数

热门文章

  1. Angular4 @HostBinding @HostListener
  2. ECharts 图表设置标记的大小 symbolSize 和获取标记的值
  3. Linux下的MBR分区
  4. extern “C”
  5. Zookeeper学习之路 (一)初识
  6. Android 面试题之编程
  7. 【腾讯敏捷转型No.6】如何打造称手的敏捷工具
  8. JAVA中的一些内置方法
  9. Git IDEA Move or commit them before merge
  10. XIB