2012-01-20 1 views
0

eventReader를 사용하여 StAX 파서에서 문자를 가져 오는 코드가 있습니다. 코드는 다음과 같습니다 : 때때로 asCharacters 인접한 isCharacters 이벤트 사이에 병합되지 않기 때문에가끔 Java 6 CDATA 구문 분석시 eventReader의 StAX 파서 버그

private String getNextCharacters(XMLEventReader eventReader) throws XMLStreamException { 
    StringBuilder characters = new StringBuilder(); 
    XMLEvent event = eventReader.nextEvent(); 

    String data = event.asCharacters().getData(); 
    characters.append(data); 

    while (eventReader.peek() != null && eventReader.peek().isCharacters()) { 
     event = eventReader.nextEvent(); 
     data = event.asCharacters().getData(); 
     characters.append(data); 
    } 

    return characters.toString(); 
} 

while 루프입니다. 이것은 설정중인 is_coalescing 플래그와는 별개의 것으로 보입니다. 이것은 합리적인 해결 방법처럼 보였지만 2 차적인 버그를 유발 한 것 같습니다. 때때로 나는]]> 내 문자열에 붙어있다. 이것은 매우 드문 경우입니다 - 5000 줄의 XML에 대해 한 번이지만 일관되게 발생합니다. 디버깅 나는 첫 번째 이벤트가 CDATA 일 때 두 번째 isCharacters 이벤트에서 발생하는 것을 발견했다. 구문 분석기는 두 번째 이벤트에 의해 CDATA 명령을 추적하지 못하는 것 같습니다.

다른 사람이 이걸 보았습니까? 누구든지 단순히 문자열을 끝내는 것보다] 더 나은 해결 방법이 있습니까? 나는 중요한 온라인이나 여기를 찾지 못했습니다. 대신

data = event.asCharacters().getData(); 

답변

0

당신은

Characters characters = event.asCharacters(); 
data = characters.getData(); 

if(characters.isCData()) { 
/* handle CDATA */ 
} else if (characters.isWhiteSpace()) { 
/* handle whitespace*/ 
} else if (characters.isIgnorableWhiteSpace()) { 
/* handle ignorable whitespace*/ 
} 

HTH, 최대

+0

감사를 갈 수있다. 그것은 문제를 해결하기 위해 내가 한 일입니다. 나를위한 진짜 문제는 Java 6 표준 라이브러리를 재정의하는 클래스 경로에 매우 오래된 XML 라이브러리가 있다는 것입니다. –

+0

이제 다행입니다. 건배 –