2009-06-16 10 views
2

Ich habe den XML-Dump der Stack Over Flow-Site heruntergeladen. Beim Übertragen des Speicherauszugs in eine MySQL-Datenbank laufe ich immer wieder in den folgenden Fehler: Eine Ausnahme: Zeichenreferenz "ein Zeichensatz wie & # x10" ist ein ungültiges XML-Zeichen.Sax ungültige XML-Zeichenausnahme

Ich verwendete UltraEdit (es ist eine 800-Megabyte-Datei), um einige Zeichen aus der Datei zu entfernen, aber wenn ich einen ungültigen Zeichensatz lösche und den Parser ausführe, erhalte ich Fehler bei der Identifizierung von mehr ungültigen Zeichen. Irgendwelche Vorschläge, wie man das löst?

Prost alle,

j

Antwort

2

Welchen Dump verwenden Sie? Es gab Probleme von der ersten Version (nicht nur ungültige Zeichen, sondern auch < erscheint, wo es nicht sollte), aber sie sollten in second dump behoben worden sein.

Für was es wert ist, habe ich die ungültigen Zeichen im Original mit zwei Regex ersetzt. Ersetzen Sie "& # x0 [12345678BCEF];" und "" jeweils mit "?" - behandelt sie beide natürlich als reguläre Ausdrücke.

+0

Ich bin der erste fecking dump, Ich werde heute abend mit dem zweiten dran sein. Danke für Ihre Hilfe. – slotishtype

2

Der Satz von Zeichen in XML erlaubt ist here. Wie Sie sehen können, ist # x10 nicht einer von ihnen. Wenn diese im Stackoverflow-Dump vorhanden sind, ist es nicht XML-konform.

Alternativ lesen Sie XML mit der falschen Zeichencodierung.

1

Sie sollten Ihre Datei auf UTF-8 ich in Java entwickeln konvertieren, ist unten meine Umwandlung

public String FileUTF8Cleaner (File 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; 

}