Sax недопустимое исключение символов XML - PullRequest
2 голосов
/ 16 июня 2009

Я скачал дамп xml сайта Stack Over Flow. При переносе дампа в базу данных mysql я продолжаю сталкиваться со следующей ошибкой: Получено исключение: ссылка на символ «некоторый набор символов, такой как & # x10», является недопустимым символом XML.

Я использовал UltraEdit (это 800-мегабайтный файл), чтобы удалить некоторые символы из файла, но если я удаляю неверный набор символов и запускаю парсер, я получаю ошибку, идентифицирующую больше недопустимых символов. Любые предложения о том, как решить эту проблему?

Ура всем,

J

Ответы [ 3 ]

2 голосов
/ 16 июня 2009

Какой дамп вы используете? В первой версии были проблемы (не только недопустимые символы, но и <, появляющиеся там, где их не должно быть), но они должны были быть исправлены во втором дампе .

Для чего я стою, я исправил недопустимые символы в оригинале, используя две замены регулярных выражений. Заменить "& # x0 [12345678BCEF];" и "& # x1;" каждый с "& # x3F;" - конечно, рассматривая их как регулярные выражения.

2 голосов
/ 16 июня 2009

Допустимый набор символов в XML: здесь . Как видите, # x10 не является одним из них. Если они присутствуют в дампе stackoverflow, значит, он не совместим с XML.

Кроме того, вы читаете XML, используя неправильную кодировку символов.

1 голос
/ 19 марта 2011

Вы должны конвертировать ваш файл в 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;

}
...