StackOverFlowサイトのxmlダンプをダウンロードしました。ダンプをmysqlデータベースに転送しているときに、次のエラーが発生し続けます。例外が発生しました:文字参照「&#x10のような文字セット」は無効なXML文字です。
UltraEdit(800メガファイル)を使用してファイルから一部の文字を削除しましたが、無効な文字セットを削除してパーサーを実行すると、さらに無効な文字を識別するエラーが発生します。これを解決する方法について何か提案はありますか?
みんな乾杯、
j
どのダンプを使用していますか?最初のバージョンから問題がありました(無効な文字だけでなく、本来あるべきではない場所にも表示されます)が、 2番目のダンプ<
で修正されているはずです。
価値があるので、2つの正規表現置換を使用して元の無効な文字を修正しました。「&#x0[12345678BCEF];」を置き換えます と""それぞれに"?" -もちろん、両方を正規表現として扱います。
XML で許可される文字セットはこちらです。ご覧のとおり、#x10 はそれらの 1 つではありません。これらが stackoverflow ダンプに存在する場合、XML に準拠していません。
または、間違った文字エンコードを使用して XML を読み取っています。
ファイルをJavaで開発したUTF-8に変換する必要があります。以下は私の変換です
public String 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;
}