非常に大きな XML ファイルを解析するために Sax を使用しようとしています。数百メガ。問題は、パーサーが一度に正確に 2048 文字を読み取って終了することです。コールバック「public void characters(...)」を使用して、2 つの部分に分割されたタグの値を取得します。たとえば、最初の部分は文字配列の位置 2044 で長さ 4 "2013" で、2 番目の部分は位置 0 で長さ 6 の "-09-30" です。これは日付値 "2013-09-30" である必要があります。一部で受け取る場合。どうすればこの分割を回避できますか? 誰でも私を助けることができますか?
public void characters(char[] ch, int start, int length) throws SAXException {
if (Main.errorProceso==0){
for(int i=0;i < strlista.size();i++){
if(strlista.get(i).equals(sEtiqueta_actual)){
if (sEtiqueta_actual.equals("Root.Header.Body.")){
String FileNm= String.valueOf(ch, start, length);
if (!FileNm.substring(0,2).equalsIgnoreCase("XX")){
logger.info("El identificador no es XX");
Main.errorProceso=1;
i=strlista.size()+1;
sEtiqueta_actual="";
}
else{
sCod_Fichero=FileNm.substring(0,2)+XXteFormat.format(XXte);
}
}
else if (sEtiqueta_actual.equals("Root.Header.Date.")){
String aux = String.valueOf(ch, start, length).split("T")[0];
try {
sFec=newFormat.format(oldFormat.parse(aux));
} catch (ParseException e) {
logger.error(e.getLocalizedMessage());
Main.errorProceso=1;
}
}
else if (sEtiqueta_actual.equals("Root.Header2.Body2.")){
sNum_Total=String.valueOf(ch, start, length);
}
else if (sEtiqueta_actual.equals("Root.Header3.Body3.Spcf.Inst.")){
sImp =String.valueOf(ch, start, length);
}
.
.
.
else if (sEtiqueta_actual.equals("Root.Header3.Body3.Spcf.Req.")){
try {
sFec2=newFormat.format(oldFormat.parse(String.valueOf(ch, start, length)));
} catch (ParseException e) {
logger.error(e.getLocalizedMessage());
Main.errorProceso=1;
}
}
}
}