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());
    }

 

你可能感兴趣的:(exception)