XML2JSON 的【net.sf.json.JSONException: nu.xom.ParsingException must be followed by either attribute specifications, ">" or "/>"】问题解决办法
在使用JSon-Lib库进行XML2JSon的转换时,在JUnit测试时没有什么问题,但是在Tomcat里面跑的时候,抛出了下面的异常,查找了google,发现关于这方便的文章比较少,即使有,也需要FQ去查找,于是就自己记录下来,以便后面的人查找翻遍。
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的代码,发现确实是在转换的时候,没有指定编码,于是按照他提供的思路,进行了编码,也就是自己指定编码处理。
原来的代码:
1 public static String xml2json(File xmlFile) throws Exception { 2 XMLSerializer xmlSerializer = new XMLSerializer(); 3 JSON json = xmlSerializer.readFromFile(xmlFile); 4 return json.toString(2); 5 }
更改后的代码,也就是把原来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()); }