SaxParser DefaultHandler 클래스를 확장 한 클래스를 만들었습니다. 제 의도는 원래 XML 데이터의 데이터 무결성을 유지하면서 일련의 객체에 XML 입력을 저장하는 것입니다. 테스트를하는 동안 노드 데이터 중 일부가 입력시 임의로 잘 렸습니다. 예를 들어문제 SaxParser를 사용하여 XML 문서 구문 분석 - 2047 자 제한?
:
Input: <temperature>-125</temperature> Output: <sensitivity>5</sensitivity>
Input: <address>101_State</city> Output: <address>te</address>
더 일을 복잡하게하려면, 위의 오류는 같은 XML 태그의 모든 ~ 100 개 인스턴스에서 "무작위"1을 발생합니다. 즉, 입력 XML 파일에는 <temperature>-125</temperature>
을 포함하는 약 100 개의 태그가 있지만 그 중 하나만 <sensitivity>5</sensitivity>
의 출력을 생성합니다. 다른 태그는 정확하게 <sensitivity>-125</sensitivity>
을 생성합니다.
public void characters(char[] ch, int start, int length)
throws SAXException {
value = new String(ch, start, length);
//debug
System.out.println("'" + value + "'" + "start: " + start + "length: " + length);
}
내에 println 문은 다음과 같은 출력을 생성 :
나는 간단한 잡아 추상 "문자 (문자 [] 채널, INT 시작, INT 길이)"방법 XML 태그 사이의 문자 내용을 덮어왔다 오 출력 결과 특정 온도 태그 :
이> '-12'start: 2045length: 3 '5'start:
> 0length: 1
이 문자 방법이 특정 XML 요소에 대해 두 번 호출되고 있음을 알려줍니다. 다른 모든 xml 태그에 대해 한 번 호출됩니다. secong 줄의 "start"값은 char [] 문자가이 XML 태그의 중간에 재설정되었음을 나타냅니다. 그리고 새로운 char []로 문자 메소드가 다시 호출됩니다.
이 문제에 익숙한 사람이 있습니까? 나는 내가 char []의 정원 한도에 도달했는지 궁금하게 생각하고 있었다. 그러나 빠른 쿼리를 통해 이럴 가능성이 없어졌습니다. 내 문자는 [] ~에 2047 문자
감사합니다,
LB
감사의 말
value = "";
를 추가해야합니다. 이 제안이 맞은 것 같습니다. –정답. 고려해야 할 또 다른 가능성은 Stax 파서 (javax.xml.stream.XMLStreamReader)를 사용하고 "합체 모드 (coalescing mode)"를 사용하는 것입니다. 이는 수동으로 텍스트를 합칠 필요없이 SAX와 유사한 고성능을 제공합니다. – StaxMan