zoukankan      html  css  js  c++  java
  • XML2JSON 的【net.sf.json.JSONException: nu.xom.ParsingException must be followed by either attribute specifications, ">" or "/>"】问题解决办法

            在使用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的代码,发现确实是在转换的时候,没有指定编码,于是按照他提供的思路,进行了编码,也就是自己指定编码处理。

            原来的代码:

           

    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());
        }
  • 相关阅读:
    编程语言学哪个比较好?
    C#一定要避免程序中很多的依靠
    EXPIREAT
    EXISTS
    DUMP
    Python之sys模块
    Python的OS模块
    CentOS 7上安装gitlab-runner
    PyCharm激活方法
    Linux03 文件的相关操作(touch、rm、mv、cat)
  • 原文地址:https://www.cnblogs.com/kaka/p/3345922.html
Copyright © 2011-2022 走看看