2011-08-09 2 views
1

가능한 중복 : 나는 다음과 같은 구문을 사용하여 XML 파일이
JAVA SAX parser split calls to characters()색소폰 문자 깨는 요소 떨어져

:

<tag ...> 
a bunch of text here 
<tag ...> 

어떤 닫는 태그가 없습니다 tag입니다. 두 태그 사이의 텍스트를 가져와 List<String>에 저장하고 characters()에 저장합니다. 대부분의 경우 작동하지만 일부 XML 파일에서는 텍스트를 두 개로 분리하는 줄 종결 자 또는 기타를 읽습니다. 단일 항목을 저장하는 대신 "여기에 텍스트 묶음"이라는 두 개의 항목이 있습니다. "한 무리"와 "여기에 텍스트"가 있습니다. 차이점은 다른 모든 항목과 달리 "한 묶음"뒤에 또는 "여기 텍스트"앞에 줄 바꿈을 저장하지 않는다는 것입니다.

이 문제를 해결해야하지만 어떻게해야할지 모릅니다. 도와 주셔서 감사합니다.

답변

1

파서는 요소 텍스트의 각 문자열에 대해 ContentHandler 문자 메서드를 여러 번 호출 할 수 있지만 줄 종결자는 반드시 필요하지 않습니다. the Java tutorial on SAX에는 문자 방법에 대한 간단한 설명이 있습니다.

파서는 한 번에 특정 수의 문자를 반환하지 않아도됩니다. 파서는 한 번에 하나의 문자에서부터 수천에 이르는 모든 것을 반환 할 수 있으며 여전히 표준을 준수하는 구현입니다. 따라서 응용 프로그램이 볼 수있는 문자를 처리해야하는 경우 characters() 메서드를 java.lang.StringBuffer에 문자를 누적시키고 모든 문자가 발견되었다고 확신하는 경우에만 조작하는 것이 좋습니다.

this Javaworld article도 좋은 설명과 예가 있습니다.

+0

방금 ​​다른 게시물에서이 "기능"에 대해 읽었습니다. 이 문제를 어떻게 해결할 수 있습니까? 'startElement' 호출 다음에'List '에 텍스트를 추가하기 만하면됩니까? 또는 다른 청크가 다른 'startElement' 후에 호출 될 수 있습니까? "모두 찾았습니다"라는 것을 어떻게 알 수 있습니까? – cesar

+0

문자열 버퍼에 읽은 문자를 저장할 수 있습니다. 당신은 그들이 요소의 끝을 찾을 때 모두 발견된다는 것을 알 수 있습니다. –

+0

@anonymous : oops는 다음 요소의 시작 부분을 발견했을 때 모두 발견된다는 것을 의미합니다. 태그는 중첩되어 있으므로 –

관련 문제