2

StackOverFlowサイトのxmlダンプをダウンロードしました。ダンプをmysqlデータベースに転送しているときに、次のエラーが発生し続けます。例外が発生しました:文字参照「&#x10のような文字セット」は無効なXML文字です。

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

みんな乾杯、

j

4

3 に答える 3

2

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

価値があるので、2つの正規表現置換を使用して元の無効な文字を修正しました。「&#x0[12345678BCEF];」を置き換えます と""それぞれに"?" -もちろん、両方を正規表現として扱います。

于 2009-06-16T13:20:10.793 に答える
2

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

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

于 2009-06-16T13:17:10.317 に答える
1

ファイルを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;

}
于 2011-03-18T23:01:07.860 に答える