2009-06-16 15 views
2

Stack Over FlowサイトのXMLダンプをダウンロードしました。ダンプをmysqlデータベースに転送すると、次のエラーが発生します。例外が発生しました:文字参照 "&#x10のような文字セット"が無効なXML文字です。Sax無効なXML文字例外

ファイルからいくつかの文字を削除するためにUltraEdit(800メガファイル)を使用しましたが、無効な文字セットを削除してパーサーを実行すると、より無効な文字を識別するエラーが発生します。これを解決する方法に関する提案はありますか?

乾杯すべて、

J

答えて

2

どのダンプを使用していますか?最初のバージョン(無効な文字だけでなく、<も表示されないはずです)から問題がありましたが、second dumpに修正されているはずです。

2つの正規表現の置き換えを使用して、無効な文字をオリジナルに修正しました。 "&#x0 [12345678BCEF];" 「」には「?」が含まれています。これらを両方とも正規表現として扱います。

+0

、私は今夜​​第二のものでそれに着きます。ご協力いただきありがとうございます。 – slotishtype

2

XMLで許可された文字のセットがhereです。ご覧のとおり、#x10はその1つではありません。これらがstackoverflowダンプに存在する場合、XMLに準拠していません。

また、間違った文字エンコードを使用してXMLを読み込んでいます。

1

あなたは以下の私の変換

で、UTF-8 私はJavaでの開発にあなたのファイルを変換する必要があり

パブリック文字列FileUTF8Cleaner(ファイルXMLFILE){私は最初feckingダンプを使用してい

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; 

} 
関連する問題