【问题标题】:Sax invalid XML character exceptionSax 无效 XML 字符异常
【发布时间】:2009-06-16 13:13:17
【问题描述】:

我已经下载了 Stack Over Flow 站点的 xml 转储。在将转储传输到 mysql 数据库时,我一直遇到以下错误:出现异常:字符引用“某些字符集如 ”是无效的 XML 字符。

我使用 UltraEdit(它是一个 800 meg 的文件)从文件中删除了一些字符,但是如果我删除了无效字符集并运行解析器,我会收到识别更多无效字符的错误。关于如何解决这个问题的任何建议?

大家好,

j

【问题讨论】:

    标签: java xml sax


    【解决方案1】:

    您使用的是哪个转储?第一个版本存在问题(不仅是无效字符,还有< 出现在不应该出现的地方),但它们应该在second dump 中得到修复。

    为了它的价值,我使用两个正则表达式替换修复了原始中的无效字符。替换“[12345678BCEF];”和 "" 每个都带有 "?" - 当然,将它们都视为正则表达式。

    【讨论】:

    • 我正在使用第一个该死的转储,今晚我将使用第二个。感谢您的帮助。
    【解决方案2】:

    XML 中允许的字符集是here。如您所见,#x10 不是其中之一。如果这些存在于 stackoverflow 转储中,则它不符合 XML。

    或者,您正在使用错误的字符编码读取 XML。

    【讨论】:

      【解决方案3】:

      您应该将文件转换为 UTF-8 我用java开发,下面是我的转换

      公共字符串 FileUTF8Cleaner(文件 xmlfile){

          String out = xmlfile+".utf8";
          if (new File(out).exists())
              System.out.println("### File conversion process ### Deleting utf8 file");
              new File(out).delete();
              System.out.println("### File conversion process ### Deleting utf8 file [DONE!]");
      
          try {
              System.out.println("### File conversion process ### Converting file");
              FileInputStream fis = new FileInputStream(xmlfile);
              DataInputStream in = new DataInputStream(fis);
              BufferedReader br = new BufferedReader(new InputStreamReader(in));
              String strLine;
      
              FileOutputStream fos = new FileOutputStream(out);
      
              while ((strLine = br.readLine()) != null) {
      
                  fos.write(strLine.replaceAll("\\p{Cc}", "").getBytes());
                  fos.write("\n".getBytes());
              }
      
              fos.close();
              fis.close();
              in.close();
              br.close();
              System.out.println("### File conversion process ### Converting file [DONE)]");
      
          } catch(Exception e) {
              e.printStackTrace();
          }
      
              System.out.println("### File conversion process ### Processing file : "+xmlfile.getAbsolutePath()+" [DONE!]");
              return out;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 2016-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 2020-07-25
        相关资源
        最近更新 更多